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

Yan*_*Yan 105 core-data ios icloud cloudkit

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

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

我的问题是:

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

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

  3. 如果未启用iCloud帐户,该怎么办?

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

我目前的理解是:

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

  • iCloud将数据和存储同步到云中

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

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

Tom*_*ton 179

就像这样:

  • 核心数据本身完全是本地的,不会自动与Apple的任何云服务一起使用.
  • 启用iCloud的核心数据将通过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核心数据相关的所有内容均标记为已弃用.因此,应该避免新的开发.

  • @Tom Harrington - 您可以尝试使用适用于iOS 8的iCloud进行核心数据并告诉我们您的印象吗?我在iOS 7中也经历了很多腐败,Apple支持证实了很多错误.我希望iOS 8将其可靠性带到可接受的水平,但很想听听你的意见,专家;) (3认同)
  • "您不必编写任何特定于云的代码,只需添加侦听传入更改(这与在不同的托管对象上下文中进行的更改很相似)." - 你有这个评论的代码示例/示例吗?我找不到可靠的例子:( (3认同)

Pom*_*ule 22

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

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

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