【问题标题】:UITableView reload sections order matters?UITableView 重新加载部分的顺序很重要吗?
【发布时间】: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 部分。您应该 reloadSectionsall 部分同时进行任何更改。要么,要么插入和删除行。

标签: ios objective-c cocoa-touch uitableview


【解决方案1】:

我认为UITableview更新有问题;您正在加载 section 1 表,而 section 0 正在重新加载。我建议你在重新加载之前和之后使用[tableview beginUpdates][tableview endUpdates] 方法,问题应该会消失。

如果没有,请告诉我。希望这会有所帮助。

【讨论】:

  • 我只使用了一个类似的更新并得到相同的错误 [self.groupDetailsTableView reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationFade];任何想法@iEinstein
【解决方案2】:

试试这个

[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:NO];

【讨论】:

  • 你为什么要回答一个 3 岁的问题并且已经有一个公认的答案? :O
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多