NSFetchedResultsControllerDelegate和PrivateQueueConcurrency

时间:2016-01-20 21:54:41

标签: ios cocoa-touch core-data

我一直在读,如果您使用具有私有队列并发类型的上下文,具有该上下文的FetchedResultsController也将在该私有队列上调用其委托方法。 (例如here中链接的this SO answer)。

我已对此进行了测试,我的视图控制器(FRC委托)正在主线程上接收这些调用。只是好奇是否有人对此有明确的答案。

我在主线程上创建并调用MO上下文和FRC。我的-performBlock调用上下文只进行一些模型更改并保存 - 他们不会触摸UI或将任何内容发送到mainQueue

编辑:具体来说,以下引用是正确的;即我们是否需要实施 使用对主队列的调用的FRC委托方法

  

NSFetchedResultsControllerDelegate回调现在将来自上下文的队列。您执行的任何用户界面更新都需要分派到主队列:

- (void)controllerDidChangeContent:(NSFetchedResultsController*) controller {
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
    [[self tableView] endUpdates];
}];

}

1 个答案:

答案 0 :(得分:0)

如果在视图控制器中实现了获取的结果控制器委托方法,则应在主线程上调用 。通常,视图控制器控制视图并对数据更改做出反应,以更新主线程上发生 par force 的托管视图。

如果你没有触及UI",你应该使用视图控制器,而是使用某种抽象数据管理器类。确保托管对象上下文具有专用队列并发类型,并通过块API进行所有调用(包括FRC' s performFetch)。