【发布时间】:2013-10-18 14:43:23
【问题描述】:
我的应用中有以下核心数据设置:
Persistent Store Coordinator
^ Background MOC (NSPrivateQueueConcurrencyType)
^ Main Queue MOC (NSMainQueueConcurrencyType)
这里是初始化代码:
_backgroundContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[_backgroundContext setPersistentStoreCoordinator:self.coordinator];
_mainContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
[_mainContext setParentContext:_backgroundContext];
我使用后台 MOC 来导入大量数据。我还使用它在后台执行复杂的获取请求,然后将对象 ID 传递到主队列以使用这些 ID 获取对象。
这很好用。但是,我不确定如何让主队列 MOC 知道在后台 MOC 中所做的更改。我知道如果我在主队列 MOC 上执行 fetch 请求,它将获得更改,但这不是我想要的。
使用后台MOC发布的NSManagedObjectContextObjectsDidChangeNotification通知,在主队列MOC上调用mergeChangesFromContextDidSaveNotification:可以吗?这应该会导致主队列 MOC 的NSManagedObjectContextObjectsDidChangeNotification 通知触发。我正在我的视图控制器中收听此通知,并检查userInfo 的更改并相应地重新显示数据。
如果您有一个带有两个附加 MOC 的持久存储协调器,我认为您通常会这样做。但是当您有子/父上下文时,我不确定这是否是正确的方法。
【问题讨论】: