我以为我 got it 。但是我在我的应用程序中发现的一个新崩溃则不然。因此,当 newIndexPath 为非零且与 NSFetchedResultsChangeUpdate
中的 indexPath 不同时,有人知道 -controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:
真正正确的代码吗?
最佳答案
我刚刚在更新时遇到了崩溃,当该索引路径与从表中检索单元格所需的索引路径不匹配时,似乎 newIndexPath
被提供为获取的结果 Controller 对象的索引路径。考虑以下:
在上述情况下,假设您在适当的
[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/