我正在开发一个 VOIP/聊天应用程序,即使在后台也可以接收数据。
当应用程序移动到后台时,我需要禁用 NSFetchedResultsController
以防止后台的 UI 更改。
我这样做 -
- (void)applicationWillResignActive
{
[super applicationWillResignActive];
self.fetchedResultsController.delegate = nil;
}
- (void)applicationDidBecomeActive
{
[super applicationDidBecomeActive];
self.fetchedResultsController.delegate = self.fetchResultControllerDelegate;
}
我注意到返回前台时不需要调用[self.tableView reloadData]
。 (编辑:只是为了澄清当应用程序在后台并且 fetchedResultsController.delegate 为零时,核心数据数据库已使用新数据进行了更新)。
重新分配 fetchedResultsController.delegate
后,表格会立即自行更新。
- 是什么让它更新,
fetchedResultsController
预制件在重新分配时是否会获取? - 这种方法是否存在任何可能导致
tableView
和fetchedResultsController
之间发生冲突的陷阱?
谢谢
最佳答案
获取结果 Controller 提供以下功能:
可以选择监视关联的托管对象上下文中对象的更改,并将结果集中的更改报告给其委托(delegate)(请参阅“ Controller 的委托(delegate)”)。 可以选择缓存其计算结果,以便如果随后重新显示相同的数据,则不必重复该工作(请参阅“缓存”)。 因此, Controller 实际上具有三种操作模式,这取决于它是否具有委托(delegate)以及是否设置了缓存文件名。
无跟踪:委托(delegate)设置为零。 Controller 只是提供对数据的访问,就像执行提取时一样。
仅内存跟踪:委托(delegate)非 nil,文件缓存名称设置为 nil。 Controller 监视其结果集中的对象,并更新部分和排序信息以响应相关更改。
完全持久跟踪:委托(delegate)和文件缓存名称非零。 Controller 监视其结果集中的对象,并更新部分和排序信息以响应相关更改。 Controller 维护其计算结果的持久缓存。
关于ios - 在启用后台的应用程序中启用、禁用 NSFetchedResultsController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20782464/