我正在制作一个新版本的应用程序,它将SQLite数据库从旧的应用程序版本(无核心数据,没有iCloud)升级到具有Core Data和iCloud的新版本。我的应用程序有一些功能可以将数据从SQLite中提取出来并将其添加到Core Data中。
以下是我遇到的问题:
我可以在新版本的发布说明中发出一个重要警告,即只升级应用程序的一个实例并在其他设备上安装新内容,但有些人不会注意到这一点。
是否有一种编程方式可以防止多个设备升级到Core Data / iCloud时出现数据重复?我想过为iCloud键/值同步添加一个标志,但是在数据库升级之前,该数据可能无法及时到达第二个设备。
有什么想法吗?提前谢谢。
iOS 7,Xcode 5.1.1
答案 0 :(得分:1)
在无处不在的KV商店中使用标志将用于检测数据是否已播种。但是,根据应用的设置方式,您可能仍会遇到重复数据。例如,如果用户可以启用/禁用iCloud,并且作为其合并的一部分,则在iCloud和本地存储之间存储数据。
尽管令人沮丧但通常最好添加逻辑来检测和删除重复数据。为此,您通常需要一些额外的信息(例如,最后更新的字段)。关键是重复数据删除在各设备之间是一致的(例如,始终删除相同的副本)。
根据过去的经验,我也会对使用无处不在的KV商店持谨慎态度。同步可能需要很长时间。相反,我建议在iCloud中存储一个文件,每个同步设备都有一个唯一的标识符。通过这种方式,您可以判断是否存在任何数据,以及您的设备之前是否已与iCloud数据同步。
我有一个iCloud堆栈(我在我自己的应用程序中使用它),它演示了基本的重复数据删除和基于文件的检查,您可以在https://github.com/IainMcManus/iOSCoreLibrary
在GitHub上签出 上基于文件的检查有更多信息