我尝试使用this方法实现无限滚动UITableView
解决方案的核心逻辑是:
这意味着单个单元格插入或删除实际上会导致三次插入或删除。由于我的表的数据源由NSFetchedResultsController
填充,因此会导致断言失败。
更新后的现有部分中包含的行数(12)必须等于更新前该部分中包含的行数(15),加上或减去从该部分插入或删除的行数(插入0,删除1)并加上或减去移入或移出该部分的行数(0移入,0移出)。
在这些情况下,是否有某种方法可以阻止程序崩溃?我非常感谢任何帮助/指针。感谢。
答案 0 :(得分:0)
这在iOS中可能有点棘手,特别是当你刚开始时。关键是在通知tableview更改之前更新支持UITableView
的数据源。
例如,如果您有NSArray
支持您的桌面视图,那么您需要在桌面视图上调用reloadSection:
之前删除或添加项目。
虽然它是最不优化的解决方案,但您的测试可以随意调用reloadData
,这将忽略tableview缓存的内容,并根据支持tableview的内容强制重新计算。
答案 1 :(得分:0)
您可以使用NSFetchedResultsControllerDelegate
方法controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:
。插入\删除3个对象。
为了简单起见,您可以在表视图中返回3
部分的数量(这将处理获得3个对象的副本)。然后在NSFetchedResultsControllerDelegate
的所有部分的UITableView
更新对象中(插入,删除或移动)。您应该使用NSFetchedResultsControllerDelegate
中的行号,并对不同的部分应用所有更改3次。请务必使其与UITableView
数据源方法tableView:numberOfRowsInSection:
保持一致。