使用iCloud同步复制CoreData记录

3
当核心数据与iCloud同步时,偶尔会出现所有记录都翻倍的情况。我认为这是在重新安装应用程序时发生的,应用程序尚未同步数据,创建了一个新的数据集,然后iCloud同步并且每个模型的每个记录都有两个。
有没有办法防止这种行为?现在我正在加载和同步数据时检查每个模型是否重复,但这似乎很混乱和不专业。

我会检查iCloud是否已经创建了该文件,如果没有,则创建初始数据集。 如果两个设备运行您的应用程序,则会遇到相同的问题,第一个设备将创建初始数据库实例并加载种子数据。 下一个设备需要检查iCloud中的文件是否已经存在,如果存在,则跳过初始种子数据的加载。 当然,如果用户在两者都断开连接时启动应用程序,则必须处理用户决定将它们连接起来时的情况。 有点混乱,但也许可以询问用户要保留哪个版本。 - Duncan Groenewald
你是直接使用Core Data进行同步,还是使用其他充当中介的框架?最近我发现两个可能会让你更容易实现这一目标的框架,它们分别是Magical RecordMMRecord - stiggs
2个回答

0

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

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

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

这种方法可以解决问题,但感觉有点像黑客行为。我的Ensembles框架中使用的另一种方法是为您的对象提供全局标识符,以便同步框架可以自动导入和合并种子数据。这是Ensembles采取的方法,它使得种子数据变得更加容易和不那么临时。


-2

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

如果您想使用核心数据,请使用MagicalRecord


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接