如何在使用绑定时使子NSManagedObjectContext保持最新

时间:2013-07-09 05:20:01

标签: objective-c cocoa core-data nsmanagedobjectcontext cocoa-bindings

我设置NSManagedObjectContext设置为NSPrivateQueueConcurrencyType,我大部分时间都在使用该应用。

除此之外,我创建了一个带有NSMainQueueConcurrencyType的子MOC,用于cocoa绑定(我听说绑定不适用于私有队列MOC)。我已将一些ObjectControllerArrayController绑定到此子上下文。我非常希望将子进程保留在主队列中,而不是交换MOC队列类型。

当我通过UI更改绑定对象时,更改不会传播到父上下文。当我对父上下文进行更改时,它们不会过滤到Object / ArrayControllers。

我怎样才能实现这一目标?是否有一个设置可以告诉Object / ArrayControllers适当地刷新它们的上下文并在它们进行更改时保存它?

1 个答案:

答案 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];
    }];
}