7

我遵循了与“将核心数据与 CloudKit 一起使用”中的相同步骤:

  1. 新项目
  2. 启用核心数据 + 云套件
  3. 添加 iCloud/CloudKit 权利 + 后台模式/远程通知权利。
  4. 在 iPhone Xr 模拟器中,我登录到我创建的 iCloud 帐户(然后在 icloud.com 上验证!)并运行应用程序,创建多个条目。
  5. 然后我在 iPhone Xs 模拟器中登录了同一个 iCloud 帐户。我运行了该应用程序,但没有合并任何条目。在此模拟器中创建条目也不会合并回 Xr 模拟器。

我错过了什么?

4

2 回答 2

10

要使用模拟器查看更改,您必须退出应用程序,然后重新加载(或构建并运行)。

模拟器永远无法接收远程通知来触发 iCloud 同步,因此您需要手动强制同步,但我发现无法从我的 Xcode 11 beta 中的菜单手动触发同步(给出错误)。

Andrew Bancroft 有一篇关于其他一些事情的好帖子,例如将automaticMergesChangesFromParent属性设置为 true,但这在使用 Simulators 时没有任何区别(编辑:确实如此,但我没有意识到,因为我只是在构建 &每次运行)。

安德鲁的帖子:https ://www.andrewcbancroft.com/blog/ios-development/data-persistence/getting-started-with-nspersistentcloudkitcontainer/#where-s-my-data

我在同一条船上,因为我负担不起安装任何 beta 软件(Xcode 除外),所以我将不得不坚持使用模拟器。但是我将现有应用程序转换为 CloudKit 的经验非常非常积极。我只需要对现有项目做三件事:

  • 添加后台通知和 CloudKit 功能
  • 确保所有核心数据属性和关系都是可选的(如果为零,则具有默认值)
  • 将 NSPersistentContainer 重命名为 NSPersistent CloudKit容器

……就是这样!脑洞大开。

我所有嵌套的多对多关系似乎都运行良好。

我仍然需要弄清楚如何在用户文档目录中同步当前存储为 JPG 的图像,但我怀疑它们需要作为 BLOB 存储在 Core Data 中,以便在后台转换为 CKAsset。

于 2019-06-15T08:05:45.583 回答
0

Apple 现在有名为 CoreDataCloudKitDemo 的示例代码。这包括所有基本的东西,还有额外的代码来处理来自其他设备的更改。你需要有线条

description.cloudKitContainerOptions = NSPersistentCloudKitContainerOptions(容器标识符:“iCloud.com.developerid.databasename”)

让您的本地数据库进入 iCloud 并创建模式。您需要使用 Web 上的 Cloudkit Dashboard 来查看架构等。

于 2019-11-06T18:17:26.083 回答