我以为我 got it 。但是我在我的应用程序中发现的一个新崩溃则不然。因此,当 newIndexPath 为非零且与 NSFetchedResultsChangeUpdate 中的 indexPath 不同时,有人知道 -controller:didChangeObject:atIndexPath:forChangeType:newIndexPath: 真正正确的代码吗?

最佳答案

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

  • 表 View 在索引 0 处有一个包含 15 个项目的部分。
  • 删除索引 13 处的项目(倒数第二个项目)
  • 更新索引 14(最后一项)处的项目

  • 在上述情况下,假设您在适当的 [tableView beginUpdates] 方法中使用 [tableView endUpdates]controllerWill/DidChangeContent:,您将需要使用 indexPath 参数从表中检索要更新的单元格(将是第 0 部分,索引 14)和 newIndexPath 参数从结果 Controller (将是第 0 部分,索引 13)检索用于配置单元格的对象。

    我认为它是这样工作的,因为就结果 Controller 而言,删除似乎已经发生了,但在表 View 中没有发生(由于 beginUpdates/endUpdates 调用包装了更新)。如果您考虑上述情况,这是有道理的,但似乎所有文档都没有考虑这种情况。

    所以问题的答案是,您似乎应该使用 indexPath 参数从表 View 中检索单元格,并使用 newIndexPath 参数从获取的结果 Controller 中检索对象。请注意,如果没有插入或删除,它似乎为 nil 传递 newIndexPath ,因此在这种情况下,您必须将 indexPath 用于这两个目的。

    关于ios - 如何将 newIndexPath 用于 NSFetchedResultsChangeUpdate?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12438827/

    10-12 12:55