UITableView:删除不可见的行

Sta*_*eam 5 objective-c uitableview ios

我的问题是关于删除UITableView中的“不可见”行。当我说“不可见”时,是指屏幕上未显示的行。例如,通过调用UITableView方法未返回的所有行- (NSArray *)visibleCells

我问这个问题是因为我正在开发“可扩展” UITableView。有点像一棵树。您可以有一个这样的表:

  • 菜单1
    1. 菜单1.1
    2. 菜单1.2
  • 菜单2
    1. 菜单2.1
    2. 菜单2.2

当您单击"Menu 1"单元格时"Menu 1.1",它们"Menu 1.2"将出现或消失。我可以通过简单地插入或删除带有动画的单元格来实现。

问题是,如果菜单较长且用户滚动,则例如“菜单1”中的一半行被隐藏(不可见,不显示在屏幕上,仅当向下滚动时可见),并且用户想要减少“菜单1”,这将导致我的应用程序崩溃,因为我试图删除不可见的行。

实际的错误信息是:

*由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效的更新:第0节中的行数无效。更新(11)之后现有节中包含的行数必须等于该段中包含的行数更新前的那个部分(15),加上或减去从该部分中插入或删除的行数(插入0,删除0)和加上或减去移入或移出该部分的行数(移入0,移入0)搬出去)。'

如果我对所有可见行执行完全相同的操作,则该应用程序和菜单均不会出现问题。

Sta*_*eam 0

感谢大家的回答。我所做的是使用“indexPathsForVisibleRows”来获取屏幕上显示的行的索引路径,我只是更新了我的模型并调用“reloadData”来更新我的表。这不是我期待的理想解决方案,但它有效。

我仍然不明白为什么“-deleteRowsAtIndexPaths”不适用于不在屏幕上但实际上确实存在于表中的行。