我在开发访客管理应用程序时遇到了 NSFetchedResultsController 问题。
该应用程序基本上在后台下载来宾列表(使用 NSOperation 子类),将它们插入到托管对象上下文中,然后将它们呈现在 UI 线程上的表视图中。
我认为我遵循核心数据多线程规则(我有单独的 MOC 用于在其线程上创建的操作,我使用 did-save 通知等同步我的主 MOC)。
我不完全理解的是 NSFetchedResultsController 的行为,它似乎在后台线程而不是主线程调用其委托方法(controllerDidChangeContent 等),这会导致非法的 UI 更新。
所以我的问题是 - 使用 NSFetchedResultsControllerDelegate 观察来自 MOC 保存通知的更改是否合法,还是 NSFetchedResultsControllerDelegate 设计为仅适用于主线程上完成的更改?
我不确定我的解释是否足够清楚,如果不是我可以发布一些代码来演示问题。
我的猜测是您的 MOC 已保存通知正在发送并观察到在后台线程而不是主事件线程上。这会导致NSFetchedResultsControllerDelegate
在后台线程上发送委托消息。
您需要确保您的保存通知观察者将控制权传递给主线程,例如:
- (void)backgroundMOCDidSaveNotifiaction:(NSNotification *)notification
{
[uiMOC performSelectorOnMainThread:
@selector(mergeChangesFromContextDidSaveNotification:)
withObject:notification waitUntilDone:NO];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)