从关于 CloudKit 的几个 Apple WWDC 谈话中,当使用 CloudKit 跨设备同步私人用户数据时,当用户注销 iCloud 时,应用程序应该清空设备缓存/本地副本(我使用 Core Data for on-device永久性)。然后,当该用户(或任何真正的用户)在同一设备上重新登录到他各自的 iCloud 帐户时,该设备应该从相应的 iCloud 帐户同步回数据。说得通!
我想知道当我使用 NSPersistentCloudKitContainer 时如何实现这一点(而不是自己编写所有 CloudKit 代码)。我查看了与 Apple WWDC 2019 session 202(“Using Core Data with CloudKit”)相关的示例代码,但此代码不是我想要的(示例只是不关注 iCloud 帐户部分,这就是他们不关注的原因懒得清空缓存,我认为):确实,如果我注销用户,NSPersistentCloudKitContainer 会停止同步,但是当我重新登录时它会再次同步。这实际上更像是期望的(实际上也是实际的,这很好) 当我的网络连接离线一段时间时示例应用程序的行为。
但是,如果用户从 iCloud 注销(我使用 CloudKit 框架来了解用户帐户注销和登录状态),我需要做的是:
- 从 NSPersistentCloudKitContainer “断开” sqlite 存储,然后
- 清空(甚至删除)数据库,然后,
- 当旧(或另一个)用户登录时,初始化一个新的 NSPersistentCloudKitContainer (它将重新创建一个空数据库,就像第一次使用该应用程序一样),因此可以继续与相应的云数据库进行通信。
我不能在“连接”到 NSPersistentCloudKitContainer 时清空数据库,因为它会记录所有删除,并且一旦(相同)用户再次登录,这些删除就会同步到云,我当然不想要.
这是怎么做的,也就是基本上遵循这三个步骤?
如果是,我该怎么做第 2 步?由于我必须使用某种 NSPersistentContainer 来与数据库对话,Apple 警告不要直接执行文件系统操作,而只能通过 Core Data。那么我是否需要初始化一个“标准”NSPersistentContainer(没有到云的通信管道),然后销毁数据库(例如,使用协调器实例方法destroyPersistentStore())?
还是有另一种方法可以实现相同的目标?
非常感谢您的帮助!!