UITableView的“尝试删除部分”断言失败

时间:2012-10-04 17:34:54

标签: ios objective-c uitableview cocoa-touch uikit

我正在尝试使用以下代码更新UITableView

NSMutableIndexSet *sectionsToDelete = [NSMutableIndexSet indexSet];
NSMutableIndexSet *sectionsToInsert = [NSMutableIndexSet indexSet];
NSMutableIndexSet *sectionsToReload = [NSMutableIndexSet indexSet];

/* ... */

[[self tableView] beginUpdates];
if ([sectionsToReload count]) {
    DBGLogObject(sectionsToReload);
    [[self tableView] reloadSections:sectionsToReload withRowAnimation:animation];
}
if ([sectionsToDelete count]) {
    DBGLogObject(sectionsToDelete);
    [[self tableView] deleteSections:sectionsToDelete withRowAnimation:animation];
}
if ([sectionsToInsert count]) {
    DBGLogObject(sectionsToInsert);
    [[self tableView] insertSections:sectionsToInsert withRowAnimation:animation];
}
[[self tableView] endUpdates];

日志:

sectionsToReload = <NSMutableIndexSet: 0x71b19f0>[number of indexes: 2 (in 1 ranges), indexes: (1-2)]
sectionsToInsert = <NSMutableIndexSet: 0x71ac570>[number of indexes: 3 (in 2 ranges), indexes: (0 3-4)]

(注意日志中没有sectionsToDelete。)

问题是,即使没有删除,我也会收到错误:

2012-10-04 19:21:16.769 Syntax[903:c07] *** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-2372/UITableView.m:826
2012-10-04 19:24:51.655 Syntax[903:c07] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'attempt to delete section 2, but there are only 2 sections before the update'

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

实际上,现在我已经复制了您的错误 - 如果您的数据在此更新之前只有2个部分(这是错误消息所隐含的),那么您无法重新加载第1和第2部分。您是否要更新0和1?我猜测当重新加载发生时,它必须首先删除旧数据并添加新数据,这就是删除错误消息的来源。

答案 1 :(得分:0)

“清理构建文件夹”,现在它的工作方式与预期的一样。我不明白为什么。

答案 2 :(得分:0)

您应该更改数据源,如果删除行或部分,则应更改tableView中的行数或部分