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

时间:2014-09-07 07:07:07

标签: ios sqlite core-data icloud

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

以下是我遇到的问题:

  1. 升级设备1,数据被添加到Core Data并与iCloud同步。完美。
  2. 升级设备2,相同的数据被添加到Core Data并与iCloud同步。
  3. 我的应用中的每条记录都有两份
  4. 我可以在新版本的发布说明中发出一个重要警告,即只升级应用程序的一个实例并在其他设备上安装新内容,但有些人不会注意到这一点。

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

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

    iOS 7,Xcode 5.1.1

1 个答案:

答案 0 :(得分:1)

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

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

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

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

在GitHub上签出

http://iaintheindie.com/2014/06/14/icloud-core-data-part-2/

上基于文件的检查有更多信息