0

我正在使用- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath;

函数,我检测该fromIndexPath部分是否为空。如果是,那么我有以下代码:

    NSString *fromSection = [sections objectAtIndex:fromIndexPath.section];
    [savedTable beginUpdates];
    NSIndexSet *indexSections = [NSIndexSet indexSetWithIndex:[sections indexOfObject:fromSection]];
    [savedTable deleteSections:indexSections withRowAnimation:UITableViewRowAnimationFade];
    [sections removeObject:fromSection];
    [savedTable endUpdates];

但这会导致应用程序崩溃并出现以下错误:

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

从错误的内容来看,当我删除(第一)部分时,它没有注册,因此它认为第二部分的 4 行已不正确地移动到第一部分。我如何让它知道该部分已被删除,这就是为什么 4 行已移至第一部分的原因。这将停止 NSInternalInconsistencyException 错误。

**编辑:只有在被删除的部分下方有一个部分时,应用才会崩溃。这就是“不正确”添加更多行的原因。在这种情况下,当我重新启动应用程序时,该部分已成功删除。一切看起来都很正常。

*我已经解决了这个问题。首先,当我结束更新时,我没有完全更新数据库。但即使那样它也行不通。所以我只是使用 -performSelector:withObject:afterDelay: 使用 0.1 秒的延迟来删除该部分,它起作用了!

4

2 回答 2

1

这通常发生在执行

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

仍然返回要删除的节索引的已删除节中的行数。请检查并确保此调用将返回“下一个”部分的行数(现在将在已删除部分的索引处发生......)。

于 2013-06-21T21:01:59.573 回答
0

检查方法numberOfRowsInSectionnumberOfSectionsInTableView是否正确并调用[tableview reloadData]

于 2013-06-21T22:07:51.343 回答