115

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

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

我的问题是:

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

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

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

如果有人可以分解每种技术在离线和在线保存和同步核心数据数据库的过程中的作用。

我目前的理解是:

  • Core Data 用于在本地存储数据

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

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

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

4

2 回答 2

190

就像这样:

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

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

我写了一篇从过去使用过 Core Data 和 iCloud 的人的角度描述 CloudKit的博客文章。

2016 年 6 月更新:在的最新文档中NSPersistentStoreCoordinator,与使用 iCloud 的 Core Data 相关的所有内容都被标记为已弃用。因此,可能应该避免新的开发。

于 2014-06-27T15:55:05.517 回答
23

在 iOS 13 中,Apple 宣布了 Core Data 中的新功能,以更好地与 CloudKit 配合使用。主要添加的是NSPersistentCloudKitContainer,它基本上为您管理 Core Data 和 CloudKit 之间的同步。

您可以在 WWDC 会议上使用 Core Data 和 CloudKit了解更多信息。

Apple 还针对这种用法发布了一系列不错的文档:Mirroring a Core Data store with CloudKit

于 2020-01-18T13:58:15.313 回答