使用核心数据,iCloud和CloudKit进行同步和备份,以及如何协同工作

我正在创build一个应用程序,我想要保存,同步和备份数据的早期阶段。 该应用程序不会存储任何文件只是数据库中的数据。 这将是iOS 8和以上,所以我能够使用CloudKit。 我做了一些研究,但仍不清楚Core Data,iCloud和CloudKit是如何协同工作的。

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

我的问题是:

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

    • 如果是,它会自动与iCloud同步,或者我将不得不调用方法来存储到两个地方?
  2. 如果数据只存储在云中,那么当iOS设备没有连接到互联网时,用户将能够访问它。 我读到,CloudKit只有有限的caching。

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

如果有人能够在保存并同步核心数据库的同时离线和在线地分解每项技术所做的工作。

我目前的理解是:

  • 核心数据用于本地存储数据

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

  • CloudKit能够存储和pipe理云中的数据?

我希望我提供了足够的信息,不要closures这个问题。

就像这样:

  • 核心数据本身是完全本地化的,不会自动与任何苹果的云服务工作。
  • 启用iCloud的核心数据通过iCloud开启同步。 核心数据中保存的任何更改都会传播到云中,并且云中所做的任何更改都会自动下载。 数据既存储在iCloud中,也存储在本地永久性存储文件中,即使设备处于脱机状态,也可以使用。 您不必编写任何特定于云的代码,只需要添加监听传入的更改(这非常类似于在不同的托pipe对象上下文中所做的更改)。
  • CloudKit与核心数据无关。 这不是同步系统,它是一个传输系统。 这意味着,无论您何时想要读取/写入云数据,您都需要进行明确的CloudKit API调用。 什么都不会自动发生 CloudKit不在设备上存储数据,所以如果设备处于脱机状态,则数据不可用。 CloudKit还增加了一些Core Data无法使用的function,比如公共共享数据,以及只能下载部分数据集的function。

如果您想将CoreKit与CloudKit一起使用,则必须编写自己的自定义代码来在托pipe对象和CloudKitlogging之间进行转换。 这不是不可能的,但它是更多的代码来写。 这可能会更可靠,但现在说得太早了。

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

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