【发布时间】:2016-06-11 22:30:39
【问题描述】:
在我的一个应用程序中,我想通过 CloudKit 启用同步。应用程序本身使用 CoreData 存储数据。我无法使用 CoreData+iCloud,因为我需要能够跟踪使用上述设置无法实现的更改。
我面临的明显挑战与 CloudKit 操作将在后台线程上发生这一事实有关,因此我需要支持我的 CoreData 堆栈的并发性。
假设我有一些我想与 CloudKit 同步的 CoreData 实体。要进行后台同步,我需要创建一个单独的托管对象上下文。当此上下文获取在其他设备上对我的实体所做的更改时,我想保存这些更改。
但是,问题在于,在执行 fetch 期间,用户可能已经更改了给定实体的某些属性,而我现在被这个实体困住了,该实体在两个上下文中都有一些重要信息。我不能只选择保存哪一个 - 我需要合并更改。
很遗憾,我不明白需要采用哪种方法才能手动同步这些更改。我已经检查了可能的技术(父子、多个上下文、多个商店协调器),但我仍然不明白我需要选择哪种方法。
谁能帮我解决这个困惑?
对我来说最理想的解决方案是,每当同步上下文尝试将更改合并到也有一些更改的主上下文时,我都会遇到冲突。在这种情况下,我可以轻松决定应该更新哪些属性,但我真的不知道如何做到这一点......
【问题讨论】:
-
如果你有时间,我建议你阅读这本很棒的书:objc.io/books/core-data 它终于让我了解了野兽是如何工作的。作为不同上下文之间冲突处理的案例研究,它还为您的确切问题提供了解决方案。还可以访问代码。
-
感谢您的建议!我一定会考虑阅读整本书。您是否有机会至少提供一个提示,说明哪种方法最适合我的情况?
-
@AndriyGordiychuk 嘿,你解决了这个问题吗?我遇到了几乎相同的问题,与云同步给了我一堆不同的冲突,我不知道如何解决。如果您愿意分享您的解决方案,将会非常有帮助。提前致谢
标签: ios swift core-data concurrency cloudkit