繁体   English   中英

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

[英]Using Core Data, iCloud and CloudKit for syncing and backup and how it works together

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

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

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

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

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

您可以在 WWDC 会议将 Core Data 与 CloudKit 结合使用来了解更多信息

Apple 还针对这种用法发布了一系列不错的文档: 使用 CloudKit 镜像核心数据存储

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM