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

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

我的问题是:

  • 如果我使用CloudKit,是否还需要创建本地核心数据数据库?
  • 如果是,它会自动与 iCloud 同步还是我必须调用方法来存储到两个地方?
  • 如果数据仅存储在云中,当iOS 设备未连接到互联网时,用户可以访问它。我读到 CloudKit 只有有限的缓存。
  • 如果未启用 iCloud 帐户,这将如何工作。

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

    我目前的理解是:
  • Core Data 用于本地存储数据
  • iCloud 同步数据并存储在云端
  • CloudKit 提供了在云中存储和管理数据的能力??

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

    最佳答案

    就像这样:

  • 核心数据本身是完全本地的,不会自动与任何 Apple 的云服务一起使用。
  • 核心数据 启用 iCloud 通过 iCloud 打开同步。您保存在 Core Data 中的任何更改都会传播到云,并且会自动下载在云中所做的任何更改。数据同时存储在 iCloud 和本地持久存储文件中,因此即使设备处于离线状态也可用。您不必编写任何特定于云的代码,您只需要添加对传入更改的监听(这很像在不同的托管对象上下文中所做的更改)。
  • CloudKit 与 Core Data 无关。这不是同步系统,而是传输系统。这意味着任何时候你想要读/写云数据,你都需要进行显式的 CloudKit API 调用来做到这一点。没有什么会自动发生。 CloudKit 不会在设备上存储数据,因此如果设备处于离线状态,数据将不可用。 CloudKit 还添加了一些 iCloud 无法用于 Core Data 的功能——比如公共(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/

    10-13 03:27