在UITableView中插入和删除行有时会导致崩溃?

时间:2016-01-12 13:16:39

标签: ios objective-c uitableview uiviewanimation

我做的很平常。 首先修改数据模型,然后更新TableView。但有时应用程序崩溃。 并抛出类似的错误(取决于插入或删除)。

Fatal Exception: NSInternalInconsistencyException
Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (10) must be equal to the number of rows contained in that section before the update (10), plus or minus the number of rows inserted or deleted from that section (0 inserted, 1 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).

这是我的插入代码。

[self.tableView beginUpdates];
[self.stories insertObject:story atIndex:0];
NSArray *indexPaths = @[[NSIndexPath indexPathForRow:0 inSection:0]];
[self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];

和删除代码。

[tableview beginUpdates];
[stories removeObject:story];
NSIndexPath *indexpath = [tableview indexPathForCell:cell];
if(indexpath) {
    [tableview deleteRowsAtIndexPaths:@[indexpath] withRowAnimation:UITableViewRowAnimationTop];
}
[tableview endUpdates];

2 个答案:

答案 0 :(得分:6)

插入代码:

 client = new IR("complet");

删除代码:

[self.stories insertObject:story atIndex:0];

[self.tableView beginUpdates];
NSArray *indexPaths = @[[NSIndexPath indexPathForRow:0 inSection:0]];
[self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];

注意:在更新tableview的行内时,不应该在数组中添加/删除对象。

答案 1 :(得分:0)

[tableview reloadData];[self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade];

你也在[self.tableView beginUpdates];之间进行数据库操作 和[self.tableView endUpdates];。这不合适。

根据错误提示,该表视图的表视图行和数据源不匹配。