UITableView重新加载section的顺序是否重要?

4

我正在尝试理解为什么重新加载 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];

2
如果第0个区域的项目数量发生变化,您将会看到您所描述的行为。如果第0个区域具有与表格不匹配的数据源响应,则无法更新第1个区域。您应该同时为所有带有任何更改的区域重新加载reloadSections。或者在进行操作时逐行插入和删除。 - Rob
2个回答

9
我认为在UITableview的更新中存在问题;当section 0正在重新加载时,你正在加载section 1表格。我建议你在重新加载之前和之后使用[tableview beginUpdates][tableview endUpdates]方法,这样问题应该就会消失。
如果还有问题,请告诉我。希望能帮到你。

我只使用了一个更新语句,但是仍然遇到了相同的错误。 [self.groupDetailsTableView reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationFade]; @iEinstein,你有什么想法吗? - Shourob Datta

1
尝试这个。
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:NO];

2
你为什么要回答一个三年前已经有被接受的答案的问题? :O - Peter Warbo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接