如何删除部分的最后一行?

Bar*_*obs 15 iphone cocoa-touch uitableview uikit

这个问题让我忙碌了好几个小时.我有两个部分,每个部分有一行.当我删除其中一个部分中的行时,它会抛出一个异常,说这是一个无效的更新(更新前后的行/部分数不相同).这是可以理解的,因为我删除了一节的最后一行,因此我删除了该节.问题是如何避免异常.

我的数据源一切正常.我检查并重新检查(相信我).

因此,正如线程的标题所述,如何在不获取异常的情况下删除节的最后一行?

谢谢,

巴特

Mas*_*aro 27

删除行时,此行是其中最后一行,您还需要删除该部分.基本上,您需要跟踪要删除的indexPaths(与行关联的索引)以及与需要删除的部分相关的索引,因为它们不再包含行.你可以这样做:

NSMutableIndexSet *indexes = [NSMutableIndexSet indexSet];
Run Code Online (Sandbox Code Playgroud)

每次从模型数组中删除与tableView的特定部分相关的对象时,检查数组计数是否为零,在这种情况下,向索引添加表示该部分的索引:

[array removeObjectAtIndex:indexPath.row];
if(![array count])
    [indexes addIndex: indexPath.section];
Run Code Online (Sandbox Code Playgroud)

确定与要删除的行相关的所有indexPath,然后按如下所示更新tableView:

[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade];
[tableView deleteSections:indexes withRowAnimation:UITableViewRowAnimationFade];
[tableView endUpdates];
Run Code Online (Sandbox Code Playgroud)

这对我和我建议采用这种方法的其他人有用.

  • 嗨巴特,你是怎么解决删除最后一节最后一行的问题的? (4认同)
  • 要添加到此,当我删除节中的最后一行时,我只调用deleteSections:withRowAnimation:.我不调用deleteRowsAtIndexPaths:withRowAnimation:.动画看起来一样,并且不会抛出任何异常. (2认同)