以此工作流程为例:
NSFetchedResultsController绑定到Main MOC,但是Main MOC没有做真正的保存,它会传播到Background Writer MOC,当后者保存到PSC时,如何通知NSFetchedResultsController?
我做了一个演示来测试它,它有效,但无法找出它的工作原理?
答案 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
会收到通知。