处理多个managedobjectcontext

时间:2013-10-22 11:18:22

标签: ios objective-c multithreading core-data managedobjectcontext

我有三个托管对象上下文,即:

masterManagedObjectContext(NSPrivateQueueConcurrencyType), 
backgroundMangedObjectContext(NSPrivateQueueConcurrencyType), 
uiManagedObjectContext(NSMainQueueConcurrencyType)

师父是父母,其他两个是孩子。当我保存任何子上下文时,我会保存主上下文。但是当backgroundMangedObjectContext保存在主版中时,UIManagedObjectContext未在executeFetchRequest中获取更新的数据。

我如何实现这一目标?请帮忙。过去三天我非常关注这个问题。

有些帖子暗示,当master被保存时,我必须使先前获取的对象无效。但我不知道该怎么做。

我试过

[UIManagedObjectContext reset]

但没有运气。

1 个答案:

答案 0 :(得分:0)

试试这个,

您需要在viewDidLoad或init方法中添加观察者,

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(contextDidSave:)
name:NSManagedObjectContextDidSaveNotification object:nil];

并实现此方法,

无论您何时调用此方法[context save:nil],它都会自动调用,更改将更新为masterContext。

- (void)contextDidSave:(NSNotification *)notification
{
    SEL selector = @selector(mergeChangesFromContextDidSaveNotification:);
    [[self masterManagedObjectContext] performSelectorOnMainThread:selector withObject:notification waitUntilDone:YES];

}