我一直在读,如果您使用具有私有队列并发类型的上下文,具有该上下文的FetchedResultsController也将在该私有队列上调用其委托方法。 (例如here中链接的this SO answer)。
我已对此进行了测试,我的视图控制器(FRC委托)正在主线程上接收这些调用。只是好奇是否有人对此有明确的答案。
我在主线程上创建并调用MO上下文和FRC。我的-performBlock调用上下文只进行一些模型更改并保存 - 他们不会触摸UI或将任何内容发送到mainQueue
编辑:具体来说,以下引用是正确的;即我们是否需要实施 使用对主队列的调用的FRC委托方法
NSFetchedResultsControllerDelegate回调现在将来自上下文的队列。您执行的任何用户界面更新都需要分派到主队列:
- (void)controllerDidChangeContent:(NSFetchedResultsController*) controller {
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
[[self tableView] endUpdates];
}];
}
答案 0 :(得分:0)
如果在视图控制器中实现了获取的结果控制器委托方法,则应在主线程上调用 。通常,视图控制器控制视图并对数据更改做出反应,以更新主线程上发生 par force 的托管视图。
如果你没有触及UI",你应该不使用视图控制器,而是使用某种抽象数据管理器类。确保托管对象上下文具有专用队列并发类型,并通过块API进行所有调用(包括FRC' s performFetch
)。