在应用升级期间避免 iCloud 同步上的重复数据

Posted

技术标签:

【中文标题】在应用升级期间避免 iCloud 同步上的重复数据【英文标题】:Avoiding Duplicate Data on iCloud Sync During App Upgrade 【发布时间】:2014-09-07 07:07:06 【问题描述】:

我正在制作一个新版本的应用程序,它将 SQLite 数据库从旧应用程序版本(没有 Core Data,没有 iCloud)升级到包含 Core Data 和 iCloud 的新版本。我的应用有一些功能可以从 SQLite 中提取数据并将其添加到 Core Data。

这是我遇到的问题:

    升级设备 1,数据被添加到 Core Data 并与 iCloud 同步。完美。 升级设备 2,将相同的数据添加到 Core Data 并与 iCloud 同步。 现在我的应用中的每条记录都有两份

我可以在新版本的发行说明中提出一个重大警告,即只升级应用的一个实例并在其他设备上安装新版本,但有些人不会注意到这一点。

是否有一种编程方式可以防止多个设备升级到 Core Data/iCloud 时出现数据重复?我曾考虑为 iCloud 键/值同步添加一个标志,但在数据库升级之前,该数据可能无法及时发送到第二台设备。

有什么想法吗?提前致谢。

ios 7,Xcode 5.1.1

【问题讨论】:

【参考方案1】:

在无处不在的 KV 存储中使用标志将用于检测数据是否已播种。但是,根据您的应用程序的设置方式,您可能仍会遇到重复数据。例如,如果用户可以启用/禁用 iCloud,并且作为该合并的一部分,则 iCloud 和本地存储之间存在数据。

虽然令人沮丧,但通常最好添加逻辑来检测和删除重复数据。为此,您通常需要一些附加信息(例如,最后更新的字段)。关键是重复数据删除在设备之间保持一致(例如,始终删除相同的重复项)。

根据过去的经验,我也会对使用无处不在的 KV 商店持谨慎态度。同步可能需要很长时间。相反,我建议将文件存储在 iCloud 中,并为每个同步设备使用唯一标识符。通过这种方式,您可以判断是否存在任何数据,以及您的设备之前是否已与 iCloud 数据同步。

我有一个 iCloud 堆栈(我在自己的应用程序中使用它),它演示了基本的重复数据删除和基于文件的检查,您可以在 GitHub 上通过https://github.com/IainMcManus/iOSCoreLibrary 进行检查

在http://iaintheindie.com/2014/06/14/icloud-core-data-part-2/ 有更多关于基于文件的检查的信息

【讨论】:

第二个链接正是我正在寻找的。基本上,我只需要一种可靠的方法来了解另一台设备是否已经处理了数据库升级,并将一个文件上传到 iCloud,表明它已经完成应该工作得很好。所有后续设备都可以检查该文件是否存在,如果它们发现该文件存在,则不会进行本地数据库升级。谢谢!

以上是关于在应用升级期间避免 iCloud 同步上的重复数据的主要内容,如果未能解决你的问题,请参考以下文章

iCloud 同步 - 核心数据重复条目(绝望的帮助)

手动同步 iCloud

在异步 iCloud 初始化期间未能完成商店设置

tvOS 上的 iCloud 同步

全局标识符? - iCloud + Core Data + Ensembles - 删除对象时重复

检查cloudkit上的私有数据库存储[重复]