CloudKit:如何使用本地持久存储处理帐户更改?

Posted

技术标签:

【中文标题】CloudKit:如何使用本地持久存储处理帐户更改?【英文标题】:CloudKit : How to handle account changes with local persistent store? 【发布时间】:2015-10-07 07:11:36 【问题描述】:

在我的应用程序中,我必须维护一个与云套件私有数据库同步的本地持久存储。所以我只想知道如何处理可能发生的帐户更改。

我的困惑如下: 如果用户 B 登录同一部手机,现在说一组记录属于用户 A,我可以执行以下两件事:

    忽略用户并让数据也同步到 B 帐户,但这样 A 的数据也会同步到 B 的私人帐户。在这里,记录更改标签和所有内容都变得有点混乱,因为我将 CKRecord 编码字段保存到数据库。

    我可以维护一个用户表并将每条记录链接到登录的用户,这样用户数据就会分开。那么我应该与所有记录一起维护一个用户字段吗?

除了上述两件事之外,如何才能最好地处理它。

【问题讨论】:

【参考方案1】:

当然,在您的本地持久存储中,您可以添加用户 ID 来个性化所有记录。另一种机制是在检测到更改时删除所有本地数据并获取用户数据。如果您想将用户数据保留在设备上,您还可以为每个用户创建单独的数据存储。

您可以通过在应用委托或根视图控制器中添加以下代码来检测更改的登录:

NSNotificationCenter.defaultCenter().addObserverForName(NSUbiquityIdentityDidChangeNotification, object: nil, queue: nil)  _ in
     /// remove local data and fetch user data

您还应该刷新内存中所有与用户相关的数据并刷新加载的视图。

【讨论】:

感谢 edwin,在我的应用程序中,用户可能有未保存的数据到云,因为我们为他提供了打开/关闭云同步的选项,所以如果我们在帐户切换发生时删除所有数据,那么他们很有可能用户可能会丢失一些数据。对于其他 2 个选项,即在持久存储中维护用户 ID 并制作单独的持久存储,哪一个更可取? 单独的持久存储更易于维护。您只需要切换商店'您不必更改您的数据或查询。一次查询多个用户的数据只会更加困难。 假设即使我们使用不同的持久存储,我们如何处理多个持久存储的版本迁移。然后我们必须迁移所有创建的商店。 是的,在您激活商店的那一刻,您应该检查版本 hm.. 我对核心数据迁移很陌生,所以假设用户 A 有一个 1.0 版本的持久存储,用户 B 有 1.2 版本,用户 c 有 2.0 版本,并且说当前版本3.0 那么核心数据可以将每个商店迁移到适当的版本吗?我们允许他将他的数据备份到其他服务并从以前的备份中恢复。

以上是关于CloudKit:如何使用本地持久存储处理帐户更改?的主要内容,如果未能解决你的问题,请参考以下文章

Swift CloudKit CoreData 远程更改通知也会触发本地更改

我可以将 CloudKit 与不同的 iCloud 帐户一起使用吗

如何更灵活的处理 CloudKit 从云端同步到本地的 CoreData 托管对象

如何更灵活的处理 CloudKit 从云端同步到本地的 CoreData 托管对象

Swift/Cloudkit:在拉取时处理用户更改

CloudKit App 处理不同的 iCloud 帐户