我设置NSManagedObjectContext
设置为NSPrivateQueueConcurrencyType
,我大部分时间都在使用该应用。
除此之外,我创建了一个带有NSMainQueueConcurrencyType
的子MOC,用于cocoa绑定(我听说绑定不适用于私有队列MOC)。我已将一些ObjectController
和ArrayController
绑定到此子上下文。我非常希望将子进程保留在主队列中,而不是交换MOC队列类型。
当我通过UI更改绑定对象时,更改不会传播到父上下文。当我对父上下文进行更改时,它们不会过滤到Object / ArrayControllers。
我怎样才能实现这一目标?是否有一个设置可以告诉Object / ArrayControllers适当地刷新它们的上下文并在它们进行更改时保存它?
答案 0 :(得分:6)
要更改父级,您需要保存子级。如果要持久保存更改,则还需要在此之后保存父级。
[child save:&error];
[parent performBlock:^{
[parent save:&parentError];
}];
要将更改从父级更改为子级,您需要使用父级NSManagedObjectContextDidSaveNotification
中的通知方法进行合并更改,或者在子级上下文中重新获取。在你的情况下,合并可能更好。
- (void)managedObjectContextDidSave:(NSNotification *)notification {
// Here we assume that this is a did-save notification from the parent.
// Because parent is of private queue concurrency type, we are
// on a background thread and can't use child (which is of main queue
// concurrency type) directly.
[child performBlock:^{
[child mergeChangesFromContextDidSaveNotification:notification];
}];
}