如何使用 NSPersistentCloudKitContainer 启动并 运行 默认项目?

How to get default project with NSPersistentCloudKitContainer up and running?

我按照 "Using Core Data With CloudKit" 中相同的步骤操作:

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

我错过了什么?

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

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

安德鲁·班克罗夫特 (Andrew Bancroft) 有一篇很好的 post 关于其他一些事情的文章,例如将 automaticallyMergesChangesFromParent 属性 设置为 true,但这并不能使使用模拟器时的不同之处(编辑:它确实如此,但我没有意识到,因为我每次都在构建和 运行ning)。

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

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

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

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

我所有的嵌套 many-to-many 关系似乎都运行良好。

我仍然需要弄清楚如何同步当前以 JPG 格式存储在用户文档目录中的图像,但我怀疑它们需要以 BLOB 格式存储在核心数据中,以便在后台转换为 CKAssets。

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

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

让您的本地数据库转到 iCloud 并创建架构。 您需要使用网络上的 Cloudkit 仪表板来查看架构等。