我有一个奇怪的情况,我问自己,如果我做错了什么。我有一个NSFetchedResultsController和一个分配的委托。委托接收已正确添加的节的函数调用,但消息的顺序似乎未定义。
func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>,
didChange sectionInfo: NSFetchedResultsSectionInfo,
atSectionIndex sectionIndex: Int,
for type: NSFetchedResultsChangeType)
假设我的初始取回结果是3个section[0,1,2]。现在我收到关于更改的更新,如下所示:
- 。插入动作
- 。插入动作
我试图跟踪基于变化的视图模型,所以我不知道我需要在这里做什么。我如何在添加第3部分之前添加第4部分?问题是,如果我只是添加一个占位符第3节,然后添加第4节,我不知道我是否必须添加一个新的第3节,将所有后续部分移动一个,或者如果这是我在插入第4节之前错过的调用。
文档说明了顺序,但我希望更新是有序的,以便我可以跟踪对本地数组的更改。
任何提示都很感谢。
NSFetchedResultsController
是专门为驱动UITableView
数据源而设计/实现/测试的。来自文档:
While table views can be used in several ways, fetched results controllers primarily assist you with a primary list view.
回答你的问题,我不认为你做错了什么,但我认为你在试图逆向工程UITableView
实现中的一些秘密武器。
有趣的问题。我在文档中没有看到任何关于操作顺序的内容,所以我们必须假定没有保证。但是根据NSFetchedResultsControllerDelegate
的文档,实现controllerDidChangeContent(_:)
,然后重新加载表,看起来像是要走的路,而不是使用controller(:didChange:atSectionIndex:for:)
。或者,如果你想继续捕捉每个部分插入,批量处理这些更改,直到你得到didChangeContent()
调用。