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

时间:2014-06-26 23:37:53

标签: ios core-data icloud cloudkit

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

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

我的问题是:

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

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

  3. 如果未启用iCloud帐户,该怎么办?
  4. 如果有人能够在离线和在线保存和同步核心数据数据库的过程中分解每种技术的作用。

    我目前的理解是:

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

    • iCloud同步云中的数据和存储

    • CloudKit能够在云中存储和管理数据吗?

    我希望我提供足够的信息来解决这个问题。

2 个答案:

答案 0 :(得分:179)

它是这样的:

  • 核心数据本身完全是本地的,不会自动与Apple的任何云服务配合使用。
  • 启用了iCloud的核心数据 会通过iCloud启用同步功能。您在Core Data中保存的任何更改都会传播到云,并且会自动下载云中所做的任何更改。数据存储在iCloud和本地持久存储文件中,因此即使设备处于脱机状态也可以使用。您不必编写任何特定于云的代码,您只需要添加侦听传入更改(这与在不同的托管对象上下文中进行的更改非常相似)。
  • CloudKit与核心数据无关。它不是同步系统,而是传输系统。这意味着,只要您想要读取/写入云数据,就需要进行显式的CloudKit API调用。什么都不会自动发生。 CloudKit不会在设备上存储数据,因此如果设备处于脱机状态,则数据不可用。 CloudKit还添加了一些iCloud无法用于Core Data的功能 - 例如公共共享数据,并且只能下载部分数据集而不是整个数据集。

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

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

更新,2016年6月:自the most recent documentation for NSPersistentStoreCoordinator起,与iCloud核心数据相关的所有内容都标记为已弃用。因此,应该避免新的开发。

答案 1 :(得分:17)

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

您可以在WWDC会话Using Core Data with CloudKit中了解更多信息。

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