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

Epa*_*aga 6 wwdc ios cloudkit nspersistentcloudkitcontainer

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

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

我想念什么?

Pau*_*tin 7

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

模拟器从未能够接收远程通知来触发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容器

...就是这样!精神震撼。

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

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

  • @andrewbuilder我只是有一个BOOL实体,我可以在所有NSManagedObjects上切换然后保存上下文。这将触发旧数据的同步。 (2认同)