我自己有一个 UITableView,它总共初始化了 8 个部分,大多数部分只有 1 行,但少数有 2 行。我正在批量删除表中的行。我意识到其中一些行是其部分中唯一的行,因此我没有删除这些行,而是尝试删除它们的部分。我试图从 8 个部分(总共 12 行)减少到剩余的 2 个部分(每个部分 1 行)。
在调用表删除行和部分之前,我确保所有行和部分都在我的数据源之外。我的二维数组正在正确更新,因此数组的新大小为 2,每个子数组仅包含 1。考虑到这一点,在执行实际删除之前,数据源中的所有内容都已正确更新。
非常简单的代码来进行删除
[self.tableView beginUpdates];
[self.tableView deleteRowsAtIndexPaths:indexPathsToRemove withRowAnimation:UITableViewRowAnimationFade];
[self.tableView deleteSections:sectionsToRemove withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];
[self.tableView endUpdates]
但是,我在通话中遇到了崩溃。具体来说,崩溃是
*** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit/UIKit-2380.17/UITableView.m:1070
编辑:这个崩溃是不正确的,我因为索引越界错误而崩溃,这将在下面描述
使用调试器单步执行- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
并- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
让我确信我的数据源是正确的,返回 2 个部分,每个部分有 1 行。然而,这是奇怪的部分。
在- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
委托实现中,表格视图传递给我一个section=0,然后是一个section=1(这是预期的),它应该在那里结束。但它没有,然后它传递给我一个section = 6。
我不知道 6 是从哪里来的。我的数据源中的所有数字都是正确的。有人对我如何更好地调试有任何想法吗?或者关于发生了什么的任何想法?任何帮助将不胜感激!