[更新]
我发现了问题。我创建了一个自定义 UITableViewCell,并且没有使用标准方法来触发删除。我的自定义 UITableViewCell 有一个自定义 indexPath 属性,我在创建单元格时填充了该属性。这就是为什么如果不调用重新加载数据就不会更新它的原因。
作为一种解决方法,为了尽量减少代码重写,我使用标记为答案的解决方案。
[/更新]
我见过其他类似的问题,但不完全相同......
我有一个 UITableView 从 NSArray 中的对象获取它的行(单元格)。这些行使用 indexPath.row 映射到 NSArray。这意味着 NSArray 中索引为 0 的对象对应于 indexPath.row 为 0 的单元格。
每当我删除一行时,我都会从 NSArray 中删除该对象(如许多示例中所见,包括 Apple 的文档)。
问题是,每当删除一行时,indexPath 都不会更新。例如:
我有一个 3 行的表格视图。这意味着我有 indexPath.row 0、1 和 2。此外,相应的 NSArray 对象的索引为 0、1 和 2。
当我从 UITableView 中删除第 1 行并删除 NSArray 中的相应对象时,剩下的是 indexPath.row 1 和 2,但 NSArray 的索引是 0 和 1。
如果我尝试从 UITableView 中删除现在的第二行,我会遇到问题,因为它的 indexPath.row 为 2,但 NSArray 中的相应对象的索引为 1。
换句话说,indexPath.row 和对象索引不再“同步”。
人们建议使用 UITableView 的 reloadData 方法......事实上,这确实“重置”了 indexPaths,但会中断 UITableView 行动画。
如何删除行、更新 indexPaths 并仍然保持 UITableView 的动画?!