以这个工作流程为例:
NSFetchedResultsController 绑定到 Main MOC,但 Main MOC 不做真正的保存,它会传播到 Background Writer MOC,当后者保存到 PSC 时,如何通知 NSFetchedResultsController?
我做了一个演示来测试它,它有效,但无法弄清楚它为什么有效?
以这个工作流程为例:
NSFetchedResultsController 绑定到 Main MOC,但 Main MOC 不做真正的保存,它会传播到 Background Writer MOC,当后者保存到 PSC 时,如何通知 NSFetchedResultsController?
我做了一个演示来测试它,它有效,但无法弄清楚它为什么有效?
将数据保存到持久性存储时,主 MOC 不会收到通知。
但是,数据最终进入后台写入器 MOC 的唯一方法是通过临时后台 MOC,它通过 UI MOC。因此NSFetchedResultsController
,每当临时后台 MOC 将其数据向上传播到 UI MOC 时,都会收到通知,然后一个单独的线程将其保存到 PSC。
收到通知时,数据实际上并不存在于 sqlite 数据库中,NSFetchedResultsController
但并非必须如此。
从您的保存方法中也可以看出:
- (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
会得到通知。