批量插入和删除 + 重新加载旧单元格 = 例外
Posted
技术标签:
【中文标题】批量插入和删除 + 重新加载旧单元格 = 例外【英文标题】:Batch Insertion & Deletion + Reloading old cells = Exception 【发布时间】:2010-07-06 20:09:13 【问题描述】:所以我有一个 UITableView,我在其中进行批量插入/删除/重新加载。每隔一段时间,列表数据就会发生变化,所以我批量更新列表中的差异。我基本上是插入新行,删除不再存在的行,并重新加载旧数据和新数据中都存在的行。例如:
以前,列表数据如下所示: 0:苹果 1:香蕉 2:胡萝卜
之后,列表数据如下所示: 0:香蕉 1:胡萝卜 2:狗 3:大象
这导致删除第 0 行,重新加载第 1 和 2 行,并在第 2 和第 3 行插入。我调用方法的顺序也是这样:删除,然后重新加载,然后插入行。
但是,这会导致引发异常,因为我在第 2 行(重新加载和插入)上执行了两个不同的动画。这是订购问题,还是我的 indexPaths 不正确?注意:我需要重新加载旧单元格,因为该行的数据可能已更改,但不应通过插入/删除来表示。
编辑:很奇怪,这个错误只发生在 ios4 之前的 iOS 版本中。
【问题讨论】:
Apple 有一个很棒的视频教程,其中包含一些作为 WWDC 2010 视频的一部分。它被称为“Mastering Table Views”或类似的东西developer.apple.com/videos/wwdc/2010 ..他们的方法很好地解释了它并使用还有一些很酷(但很简单)的动画 WWDC 2011:UITableView Changes, Tips & Tricks 【参考方案1】:我会说删除 0,然后插入 3 和 4。不需要重新加载。您发送更新的顺序无关紧要。在您讲述更新之前,请确保您的模型反映了更改。使用 -beginUpdates: end -endUpdates: 结束调用。
这里是批量更新的链接,见清单7-8: https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/TableView_iPhone/ManageInsertDeleteRow/ManageInsertDeleteRow.html#//apple_ref/doc/uid/TP40007451-CH10-SW16
WWDC 视频提示也很好。您要注意第 128 节 - 掌握表格视图。
【讨论】:
这会确保行的正确布局吗?表视图编程指南说删除将首先发生,然后是插入。此外,不幸的是,我确实需要在持久单元格上使用重新加载,因为名称/顺序可能会更改,但不应使用插入/删除来处理。 一切正常,只需将您的调用包含在 -beginUpdate: 和 -endUpdate: 中即可。还编辑了答案的链接。 @Eiko 视频链接断开以上是关于批量插入和删除 + 重新加载旧单元格 = 例外的主要内容,如果未能解决你的问题,请参考以下文章