【发布时间】:2015-07-13 00:19:23
【问题描述】:
我创建了两个这样的上下文:
// create writer MOC
_privateWriterContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[_privateWriterContext setPersistentStoreCoordinator:_persistentStoreCoordinator];
// create main thread MOC
_managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
_managedObjectContext.parentContext = _privateWriterContext;
我有一个用_managedObjectContext 发起的NSFetchResultedController。
我知道这很奇怪,但是我正在向父级添加一条记录到_privateWriterContext,我是saving它。
令人惊讶的是子上下文和FRC 收到有关此事件的通知。为什么?我没有reset-ed 孩子,或其他任何东西。我认为只要不保存子上下文,它们就是独立的实体。
在@pteofil 文章中我发现了这一行:
当在上下文中进行更改但未保存时,它对其所有后代可见,但对其祖先不可见。
.. 它被推送到持久存储(通过持久存储协调器)并且对连接到存储的所有上下文可见。
【问题讨论】:
-
根据这篇文章benedictcohen.co.uk/blog/archives/308,这是正常行为。
-
还有一篇关于不同托管上下文设置性能的非常好的文章:floriankugler.com/2013/04/29/…
-
我明白了,您认为有可能阻止更改传播到子上下文中吗?我认为在我观察到
NSManagedObjectContextDidSaveNotification并合并通知中的更改之前,更改不会传播,如果我使用两个上下文加入相同的 PSC 配置 -
我相信这就是亲子关系的全部理念,它的设计就是这样运作的。为什么不只有 2 个单独的托管上下文,并且正如您所说,您观察
NSManagedObjectContextDidSaveNotification以合并它们之间的更改? -
是的,这就是我的意思,以旧方式创建 MOC。
标签: ios core-data nsfetchedresultscontroller nsmanagedobjectcontext