Ios 使用iCloud sync复制CoreData记录

Ios 使用iCloud sync复制CoreData记录,ios,objective-c,core-data,icloud,Ios,Objective C,Core Data,Icloud,当核心数据与iCloud同步时,有时我所有的记录都会翻倍。我相信这会发生在重新安装时,应用程序尚未同步数据,创建了一个新的数据集,然后iCloud同步,每个型号的记录都有两倍 有没有办法防止这种行为?现在,我正在检查每一个模型的加载情况和数据同步是否存在重复,但这看起来很混乱和有黑客味。尝试只使用iCloud存储是愚蠢的。数据必须存储在本地和iCloud中,否则您将遇到严重问题 如果需要核心数据,请使用。iCloud在设备之间异步传输数据,从向iCloud容器添加数据到实际传输数据之间可能有相当

当核心数据与iCloud同步时,有时我所有的记录都会翻倍。我相信这会发生在重新安装时,应用程序尚未同步数据,创建了一个新的数据集,然后iCloud同步,每个型号的记录都有两倍


有没有办法防止这种行为?现在,我正在检查每一个模型的加载情况和数据同步是否存在重复,但这看起来很混乱和有黑客味。

尝试只使用iCloud存储是愚蠢的。数据必须存储在本地和iCloud中,否则您将遇到严重问题


如果需要核心数据,请使用。

iCloud在设备之间异步传输数据,从向iCloud容器添加数据到实际传输数据之间可能有相当长的时间。元数据在设备之间的传输速度更快,但即使这样也会延迟

这一点很重要的原因是,您永远不能在一台设备上进行测试,以确保数据尚未添加到iCloud。一台设备可能已植入数据,但尚未开始上载其文件/元数据。此时,第二个设备无法知道来自第一个设备的种子数据

苹果公司的建议是在每次合并后对数据进行去复杂化处理。每个设备只添加自己的种子数据,如果您发现已经添加了两次,您将删除其中的一半,并小心确保删除每个设备上的相应对象


这种方法可行,但感觉有点像黑客。在我的框架中使用的另一种方法是为对象提供全局标识符,以便同步框架可以自动导入和合并种子数据。这是集成中采用的方法,它使种子数据变得更加容易,而且不太特别。

我检查文件是否已经在iCloud中创建,如果没有,则创建初始数据集。如果两台设备运行您的应用程序,第一台设备创建初始数据库实例并加载种子数据,则会出现相同的问题。下一个设备需要检查iCloud中是否已经存在该文件,如果已经存在,则跳过初始种子数据的加载。当然,如果用户在两个应用程序都断开连接时启动应用程序,那么当用户决定连接它们时,您将不得不处理这种情况。有点混乱,但可能会问用户要保留哪个版本。您是直接使用核心数据进行同步,还是使用其他充当中介的框架进行同步?我最近遇到的两个可能会让你更容易做到这一点的是和。