Swift - iCloud 核心数据在同步之前重复之前添加的数据

Posted

技术标签:

【中文标题】Swift - iCloud 核心数据在同步之前重复之前添加的数据【英文标题】:Swift - iCloud Core Data repeats previously added data before syncing 【发布时间】:2015-03-05 11:51:47 【问题描述】:

我不知道如何在标题中用文字解释这种情况:如果第一次启动应用程序,我会在 Core Data (DEFAULT SETTINGS) 中添加信息。现在没关系,iCloud 帐户已合并我收到 Using local storage: 1Using local storage: 0 现在我正在使用 iCloud,Core Data 中的信息已与我的 iCloud 帐户合并。当我在具有相同 iCloud 帐户的其他设备上运行应用程序时,我的应用程序添加了默认设置,当 iCloud 向我发送 Using local storage: 0 来自第一台设备的默认设置时,第二台设备中添加了两次相同的值。我的默认设置被添加了 2 次:D... 如何预防?

【问题讨论】:

【参考方案1】:

在将 iCloud 与 Core Data 结合使用时,您需要自己检测重复项并以对您的应用有意义的任何方式处理它们。 Core Data 并不关心你是否创建了重复的条目,所以如果你的应用程序将内置数据复制到它在多个设备上的持久存储中,iCloud 会很乐意为你提供重复项。如果您使用 3 个设备,您将获得 3 个副本,等等。

为此,您需要观察NSPersistentStoreDidImportUbiquitousContentChangesNotification,查找重复项并将其删除。由于您使用的内置应用程序数据应该具有固定的已知值,因此您可以通过查看该通知上的 userInfo 字典轻松找到它们。请记住,当您收到此通知时,这些对象已被插入,因此您确实需要删除它们以防止重复。

对于与预填充数据无关的重复项,这更困难但并非不可能。这听起来不像是你的情况,但以防万一,这是我不久前写的一篇博文来解释它:http://www.atomicbird.com/blog/icloud-complications-part-2

【讨论】:

persistentStoreDidImportUbiquitousContentChanges 仅在我在另一台设备上添加内容并将其导入当前设备时才有效。当我在其他设备上第一次启动应用程序时,我没有收到 persistentStoreDidImportUbiquitousContentChanges 通知,并且 iCloud 会自动从第一台设备添加我的数据并且数据会重复......

以上是关于Swift - iCloud 核心数据在同步之前重复之前添加的数据的主要内容,如果未能解决你的问题,请参考以下文章

iCloud 同步后 UITableView 不会重新加载(Swift 2)

仅为 OS X 10.8.x 和 iOS 6.x 在 iCloud 中启用核心数据同步

如何强制 iCloud 与核心数据进行同步?

核心数据 + iCloud 同步 NSPersistentStoreDidImportUbiquitousContentChangesNotification

使用 iCloud 进行核心数据同步

iCloud - 核心数据同步问题