reloadSection导致错误"尝试删除第1部分,但在使用userInfo"更新之前只有1个部分。

时间:2015-02-25 20:42:58

标签: ios uitableview core-data uikit nsfetchedresultscontroller

我收到错误"尝试删除第1部分,但更新前只有1个部分使用userInfo"这显然是由对reloadSections:withRowAnimation:的调用引起的。这怎么可能发生,因为重新加载不是删除,还是部分?

当回滚UITableViewController的数据源部分由UIFetchedResultsController支持的更改时会发生这种情况(表的第1部分包含常量行;其余部分对应于{ {1}}的部分:在这种情况下,有两个这样的部分,每个部分都有一行。UIFetchedResultController也充当UITableViewController的委托。

在回滚期间(要取消删除最后两个部分),代理会收到以下呼叫:

  1. UIFetchedResultsController; controllerWillChangeContent:是1;委托调用numberOfSectionsInTableView
  2. beginUpdates宣布controller:didChangeSection:atIndex:forChangeType:第1部分; numberOfSectionsInTableView NSFetchedResultsChangeInsert insertSections:withRowAnimation:is 3; delegate calls reloadSections:withRowAnimation:`for section 1
  3. for section 2,宣布controller:didChangeSection:atIndex:forChangeType:第0部分;委托第1部分调用NSFetchedResultsChangeInsert,第0部分调用insertSections:withRowAnimation:
  4. reloadSections:withRowAnimation:宣布controller:didChangeObject:atIndexPath:forChangeType:newIndexPath: NSFetchedResultsChangeInsert(1,0);为indexPath(2,0)
  5. 委派电话insertRowsAtIndexPaths:withRowAnimation:
  6. indexPath宣布controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:NSFetchedResultsChangeInsert(0,0);为indexPath(1,0)
  7. 委派来电insertRowsAtIndexPaths:withRowAnimation:
  8. indexPath;委托调用controllerDidChangeContent:,这会导致此错误:
  9.   

    尝试删除第1部分,但之前只有1个部分   用userInfo更新

    如果代表没有按照指示调用endUpates,则不会发生错误。

    在这种特定情况下导致错误的原因是什么?如何防止它? (顺便说一句,在这种情况下需要重新加载以更新相邻部分中页眉和页脚的标题。)

    更新我似乎问题可能与reloadSections:withRowAnimationnumberOfSectionsInTableView之后的一步中从1跳回到3(由于rollback)的事实有关{1}}而实际部分(和行)的数量在"括号内逐步增长"在controllerWillChangeContent:controllerWillChangeContent:之间。但是,并非包围正好意味着允许数据源中的项目数与表格之间存在暂时差异吗?我的controllerDidChangeContent:定义如下:

    numberOfSectionInTableView:

0 个答案:

没有答案