ios - 使用 Core Data、iCloud 和 CloudKit 进行同步和备份以及它们如何协同工作

标签 ios core-data icloud cloudkit

我正处于创建应用程序的早期阶段,我想在其中保存、同步和备份数据。该应用程序不会将任何文件仅存储在数据库中。它将是 iOS 8 及更高版本,因此我可以使用 CloudKit。我做了一些研究,但仍然不清楚 Core Data、iCloud 和 CloudKit 如何协同工作。

据了解,CloudKit 只是一种从云端获取和检索数据的方式。 CloudKit 只是与 iCloud 同步数据的另一种方式吗?

我的问题是:

  1. 如果我使用 CloudKit,是否还需要创建本地核心数据数据库?

    • 如果是,它会自动与 iCloud 同步,还是我必须调用方法来存储到两个地方?
  2. 如果数据仅存储在云中,则用户可以在 iOS 设备未连接到互联网时访问它。我读到 CloudKit 将只有有限的缓存。

  3. 如果未启用 iCloud 帐户,那将如何工作。

如果有人能分解一下每种技术在离线和在线保存和同步核心数据数据库的过程中做了什么。

我目前的理解是:

  • Core Data用于本地存储数据

  • iCloud 同步数据并存储在云端

  • CloudKit 提供了在云端存储和管理数据的能力??

我希望我为这个问题提供了足够的信息,以免被关闭。

最佳答案

是这样的:

  • Core Data 本身完全位于本地,不会自动与 Apple 的任何云服务配合使用。
  • Core Data 启用 iCloud 通过 iCloud 打开同步。您在 Core Data 中保存的任何更改都会传播到云端,并且会自动下载在云端所做的任何更改。数据同时存储在 iCloud 和本地持久存储文件中,因此即使设备处于离线状态也可以使用。您不必编写任何特定于云的代码,您只需添加对传入更改的监听(这很像在不同的托管对象上下文中所做的更改)。
  • CloudKit 与 Core Data 无关。它不是同步系统,而是传输系统。这意味着任何时候你想读/写云数据,你都需要明确调用 CloudKit API 来这样做。没有什么是自动发生的。 CloudKit 不会在设备上存储数据,因此如果设备处于离线状态,数据将不可用。 CloudKit 还添加了一些 Core Data with iCloud 所不具备的特性——比如公共(public)共享数据以及只下载部分数据集而不是全部的能力。

如果您想将 CloudKit 与 Core Data 一起使用,您必须编写自己的自定义代码以在托管对象和 CloudKit 记录之间进行转换。这并非不可能,但需要编写更多代码。它可能更可靠,但现在下定论还为时过早。

我写了a blog post从过去使用过 Core Data 和 iCloud 的人的角度描述 CloudKit。

更新,2016 年 6 月:截至 the most recent documentation for NSPersistentStoreCoordinator ,与 iCloud 的核心数据相关的所有内容都被标记为已弃用。因此,对于新的开发,可能应该避免使用它。

关于ios - 使用 Core Data、iCloud 和 CloudKit 进行同步和备份以及它们如何协同工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24441909/

相关文章:

ios - 动画 block 中 UIView 的旋转和设置中心有时不起作用

ios - 如何在 iOS 9.0 Beta 中实现新的 Core Data 模型构建器 'unique' 属性

ios - 为什么 KVO 在新旧值相同时发送更改通知?

objective-c - Core Data 托管对象中的计算

ios - 优化 iPhone 存储的 PHAsset

ios - Apple 批准将所有用户数据(包括图像)保存到 iCloud

iphone - 如何强制 iCloud 与核心数据同步?

ios - 从 iOS 中捕获的视频中获取慢动作元数据

html - Bootstrap 3 移动键盘解锁导航栏

ios - 使用陀螺仪数据旋转虚拟相机 - iOS 上的 OpenGL ES