我的应用程序中有以下核心数据设置:
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 上执行提取请求,它将获得更改,但这不是我想要的。
使用NSManagedObjectContextObjectsDidChangeNotification
后台MOC发布的通知并调用mergeChangesFromContextDidSaveNotification:
主队列MOC可以吗?这应该会导致NSManagedObjectContextObjectsDidChangeNotification
主队列 MOC 的通知被触发。我正在我的视图控制器中侦听此通知,并检查userInfo
更改并相应地重新显示数据。如果您有一个带有两个附加 MOC 的持久存储协调器,我认为您通常会这样做。但是当您有子/父上下文时,我不确定这是否是正确的方法。