带有parentContext集合的核心数据< __ NSCFSet:0x169a2190>在被列举时被突变

时间:2015-08-19 17:38:03

标签: multithreading core-data

我有以下问题:

  • 在我的应用程序中,核心数据模式是根NSManagedObjectContect与NSPrivateQueueConcurrencyType并发类型,此上下文负责解析从远程服务器获取的对象。
  • 还有NSManagedObjectContect设置为root' s childern,NSMainQueueConcurrencyType并发类型。

问题在于,例如,一些数据在根上下文中进行解析,并且必须在主线程应用程序崩溃时使用信息Collection< __ NSCFSet:0x169a2190>进行刷新。在被列举时被突变。 我做了研究,我知道通常它意味着来自根上下文的对象在线程x上被突变,同时在线程y上进行枚举。我确信99%这不是我的情况,因为我知道必须遵循多线程环境和使用核心数据的规则。我想知道它是否以这种方式起作用:

  1. 根上下文会进行一些解析。
  2. 在解析期间,应用程序想要刷新UI并在主要上下文中完成。
  3. 在刷新主上下文的操作期间从父上下文中提取对象。
  4. 当获取的操作正在执行时,由于解析操作,根上下文会改变已获取的对象。
  5. 我不知道这是不是正确的方法? 你能和我分享你对这个问题的看法吗?

1 个答案:

答案 0 :(得分:1)

看来你的设置并不理想。不是拥有主上下文的上下文来完成工作并更改对象,它应该是上下文。

如果您遵循以下模式,则无法遇到此问题:

Root context (background) saves to persistent store --> parent of
Main context (main thread) updates UI --> parent of
Worker context (background) handles web, parses, inserts, mutates etc.

当您保存工作人员上下文时,更改会上推到主上下文。例如,如果您使用NSFetchedResultsController,则可以通过实施委托方法来对更改做出反应。