微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用NSPersistentCloudKitContainer时:如果用户注销iCloud怎么办?

如何解决使用NSPersistentCloudKitContainer时:如果用户注销iCloud怎么办?

在CloudKit上的多个Apple WWDC谈话中,当使用CloudKit在设备之间同步私有用户数据时,当用户注销iCloud时,该应用程序应该清空设备上的缓存/本地副本(我使用Core Data设备上的永久性)。然后,当该用户(或实际上是任何用户)重新登录到同一设备上的相应iCloud帐户时,则该设备应从相应的iCloud帐户向下同步数据。有道理!

我想知道当我使用NSPersistentCloudKitContainer(而不是自己编写所有CloudKit代码)时如何实现这一目标。我查看了与Apple WWDC 2019会话202有关的示例代码(“将核心数据与CloudKit一起使用”),而该代码不是我想要的(示例只是不关注iCloud帐户部分,这就是为什么他们不这样做)我想打扰清空缓存):确实,如果我注销用户,NSPersistentCloudKitContainer会停止同步,但是当我重新登录时,它将再次进行同步。这实际上更像所需的(实际上也很实际,这很好) )在我的网络连接离线一段时间后,示例应用程序的行为。

但是,如果用户注销了iCloud(我使用CloudKit框架通知用户帐户注销和登录状态),那么我需要做的是:

  1. 从NSPersistentCloudKitContainer中“断开” sqlite存储,然后
  2. 清空(甚至删除数据库,然后
  3. 当旧的(或另一个用户登录时,初始化一个新的NSPersistentCloudKitContainer(它将重新创建一个数据库,就像有史以来第一次使用该应用一样),因此可以继续与相应的Cloud数据库进行通信。 / li>

在“连接”到NSPersistentCloudKitContainer时,我不能只是清空数据库,因为它记录了所有删除操作,并且(相同)用户再次登录后,这些删除操作就会同步到Cloud,我当然可以不想。

这是怎么做的,又基本上遵循了这三个步骤?

如果是,该如何执行第2步?由于我必须使用某种NSPersistentContainer与数据库进行通讯,因此Apple警告不要直接执行文件系统操作,而只能通过Core Data。那么我是否需要初始化一个“标准” NSPersistentContainer(没有到云的通信管道),然后销毁数据库(例如使用协调器实例方法destroyPersistentStore())?

还是有另一种方法可以实现同一目标?

非常感谢您的帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。