儿童MOC如何知道父母MOC的变化?

时间:2013-06-17 00:45:34

标签: ios nsmanagedobjectcontext

以此工作流程为例:

NSFetchedResultsController绑定到Main MOC,但是Main MOC没有做真正的保存,它会传播到Background Writer MOC,当后者保存到PSC时,如何通知NSFetchedResultsController?

我做了一个演示来测试它,它有效,但无法找出它的工作原理?

demo

1 个答案:

答案 0 :(得分:1)

当数据保存到持久性存储时,主MOC不会收到通知。

但是,数据应该在后台编写器MOC中结束的唯一方法是通过临时后台MOC,它通过UI MOC。因此,只要临时后台MOC将数据向上传播到UI MOC,就会通知NSFetchedResultsController,然后单独的线程将其保存到PSC。

NSFetchedResultsController收到通知时,数据实际上不在sqlite数据库中,但不一定是。

从您的保存方法中也可以看出:

- (void)save
{
    [self.mainContext performBlock:^{
        NSError *mainContextError;
        if(![self.mainContext save:&mainContextError]) {
            NSLog(@"main context error:%@", mainContextError);
        }
        [self.masterContext performBlock:^{
            NSLog(@"saving in masterContext");

            NSError *masterContextError;
            if (![self.masterContext save:&masterContextError]) {
                NSLog(@"master context error:%@", masterContextError);
            }
        }];
    }];
}

在调用[self.mainContext save]后,NSFetchedResultsController会收到通知。