如何在NSFetchedResultsChangeUpdate中使用newIndexPath?

an0*_*an0 5 core-data uitableview nsfetchedresultscontroller ios

我想我得到了它.但是我在我的应用程序中发现的新崩溃说不然.因此,任何人知道真正正确的代码NSFetchedResultsChangeUpdatenewIndexPath是非零和不一样的indexPath-controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:

Cha*_* A. 9

我刚刚在更新时遇到崩溃,newIndexPath当索引路径与从表中检索单元格所需的索引路径不匹配时,它似乎作为索引路径提供到获取的结果控制器对象中.考虑以下:

  1. 表视图的索引为0的部分包含15个项目.
  2. 索引13处的项目(倒数第二项)将被删除
  3. 索引14(最后一项)的项目已更新

在上面的例子中,假设您正在使用[tableView beginUpdates]并使用[tableView endUpdates]适当的controllerWill/DidChangeContent:方法,您将需要使用该indexPath参数从表中检索要更新的单元格(将是第0部分,索引14)和newIndexPath用于检索对象的参数使用结果控制器(将为第0部分,索引13)配置单元格.

我假设它以这种方式工作,因为就结果控制器而言,删除似乎已经发生了,但是在表视图中没有发生(由于beginUpdates/endUpdates包含更新的调用).如果你考虑上面的情况,这是有道理的,但似乎所有的文档都不考虑这种情况.

因此问题的答案是,您应该使用该indexPath参数从表视图中检索单元格,以及newIndexPath从获取的结果控制器中检索对象的参数.请注意,如果还没有插入或删除它似乎传递nilnewIndexPath,所以在这种情况下,你将不得不使用indexPath有两种用途.