【发布时间】:2013-06-04 14:17:48
【问题描述】:
我试图理解为什么我重新加载 UITableView 的部分的顺序似乎很重要
如果我像这样重新加载:
// Reload section 1
[self.groupDetailsTableView reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationFade];
// Reload section 0
[self.groupDetailsTableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];
没有问题,但是如果我以相反的顺序重新加载(首先是第 0 节,然后是第 1 节),我会收到错误:
* 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效更新:第 1 节中的行数无效。更新后现有节中包含的行数 (2)必须等于更新前该节中包含的行数 (1),加上或减去从该节插入或删除的行数(0 插入,0 删除),加上或减去移入或删除的行数移出该部分(0 移入,0 移出)。'
但是,如果我这样做,没有错误:
[self.groupDetailsTableView reloadSections:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 2)] withRowAnimation:UITableViewRowAnimationFade];
【问题讨论】:
-
如果第 0 节中的项目数量发生了变化,您将准确地看到您描述的行为。如果第 0 部分的数据源响应与表不匹配,则您无法更新第 1 部分。您应该
reloadSections对 all 部分同时进行任何更改。要么,要么插入和删除行。
标签: ios objective-c cocoa-touch uitableview