ios - 在启用后台的应用程序中启用、禁用 NSFetchedResultsController

标签 ios uitableview nsfetchedresultscontroller

我正在开发一个 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 后,表格会立即自行更新。

  1. 是什么让它更新,fetchedResultsController 预制件在重新分配时是否会获取?
  2. 这种方法是否存在任何可能导致 tableViewfetchedResultsController 之间发生冲突的陷阱?

谢谢

最佳答案

获取结果 Controller 提供以下功能:

可以选择监视关联的托管对象上下文中对象的更改,并将结果集中的更改报告给其委托(delegate)(请参阅“ Controller 的委托(delegate)”)。 可以选择缓存其计算结果,以便如果随后重新显示相同的数据,则不必重复该工作(请参阅“缓存”)。 因此, Controller 实际上具有三种操作模式,这取决于它是否具有委托(delegate)以及是否设置了缓存文件名。

无跟踪:委托(delegate)设置为零。 Controller 只是提供对数据的访问,就像执行提取时一样。

仅内存跟踪:委托(delegate)非 nil,文件缓存名称设置为 nil。 Controller 监视其结果集中的对象,并更新部分和排序信息以响应相关更改。

完全持久跟踪:委托(delegate)和文件缓存名称非零。 Controller 监视其结果集中的对象,并更新部分和排序信息以响应相关更改。 Controller 维护其计算结果的持久缓存。

关于ios - 在启用后台的应用程序中启用、禁用 NSFetchedResultsController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20782464/

相关文章:

ios - CoreDataBooks 问题断言失败。

ios - 根据实体之间的关系类型创建 NSFetchedResultsController 部分

ios - 如何为一个表格 View 加载两个自定义表格 View 单元格

swift - 为什么两个连续的页面打开时带有 segue

ios - PFQueryTableViewController 的 didSelectRowAtIndexPath 方法

iphone - 选择行后隐藏 UIPopover

ios - 如何将底部边框添加到 TableView 部分标题

iphone - uisearchbar + uitableview + nsfetchedresultscontroller

ios - AdMob 和 AdWhirl 与 iOS6 混淆

ios - 缺少文档时如何找出 ios native 函数的工作原理