【问题标题】:CoreData concurrency (for sync with CloudKit)CoreData 并发(用于与 CloudKit 同步)
【发布时间】: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


【解决方案1】:

在 Apple WWDC 2014 中,他们就这一点进行了讨论。这是成绩单,您也可以轻松找到视频;假设您的 Apple 开发人员。

http://asciiwwdc.com/2014/sessions/231

简而言之,Apple 工程师介绍了一个使用变更令牌的非常简单的示例;解决数据更改冲突问题的行业标准解决方案。

Ray Wenderlich 网站也有一些关于云套件和核心数据的优秀视频,它是一项订阅服务,虽然每月只需 20 美元,但物有所值,而且我与他没有任何关系;我只是一个订阅者。谷歌他和你找到他的网站。

【讨论】:

  • 感谢您的回复。不幸的是,这无助于解决我的问题。我的问题是,一旦我收到来自 CloudKit 的更新,我需要将这些更改合并到 CoreData 中。问题是 CloudKit 更新将在后台线程上完成。因此,我需要找到一种从后台线程更新我的应用数据的方法,但我无法弄清楚如何最好地做到这一点......
  • Andriy 这篇文章是否回答了你的问题:| stackoverflow.com/questions/35714642/…
  • 不,它没有,因为我的问题是针对核心数据的,而不是一般的后台进程
  • 我试过了;我最后的想法是,Ray Wenderlich 网站上有大约十几个关于这个主题的视频:也许你可以在那里找到答案。我可以给你标题,但不多。中级核心数据:系列介绍 (3:14) [免费] 中级核心数据第 1 部分:核心数据堆栈 (15:36) 中级核心数据第 2 部分:高级属性 (12:28) [免费] 中级核心数据第 3 部分:映射模型 (19:20) 中间核心数据第 4 部分:获取结果控制器 (9:09) 中间核心数据第 5 部分:托管对象上下文 (11:54) 中间核心数据第 6 部分:结论 (3:13)
  • Ray 确实有很好的教程。然而,他唯一一次用核心数据+云套件接触后台线程时,他提出了父子上下文模型。它在他的示例中起作用,因为他只需要在后台线程上进行读取访问。然而,就我而言,我需要一个系统来处理从后台和主线程写入核心数据,并使用某种机制来解决冲突。不幸的是,他从未讨论过这个话题......
猜你喜欢
  • 2021-05-27
  • 2020-11-06
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-23
  • 2020-07-18
相关资源
最近更新 更多