1

我在我的详细视图中的应用程序中使用了故事板,因为UITableView我将 tableview 传递给详细视图,以便能够根据某些操作删除此行,但给我以下错误

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
reason: 'Invalid update: invalid number of rows in section 0.  
The number of rows contained in an existing section after the update (4) must be equal to the  
number of rows contained in that section before the update (4),
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).'
4

3 回答 3

2

如果删除表中的最后一行,UITableView 代码预计剩余 0 行。它调用您的UITableViewDataSource方法来确定还剩下多少。由于您有一个“无数据”单元格,它返回 1,而不是 0。因此,当您删除表中的最后一行时,请尝试调用-insertRowsAtIndexPaths:withRowAnimation:以插入您的“无数据”行。

你需要做的是:

// tell the table view you're going to make an update
[tableView beginUpdates];
// update the data object that is supplying data for this table
// ( the object used by tableView:numberOfRowsInSection: )
[dataArray removeObjectAtIndex:indexPath.row];
// tell the table view to delete the row
[tableView deleteRowsAtIndexPaths:indexPath 
           withRowAnimation:UITableViewRowAnimationRight];
// tell the table view that you're done
[tableView endUpdates];

(根据这个链接,你应该避免NSInternalInconsistencyException。)

于 2012-12-25T13:28:14.387 回答
0

添加或删除行时,您必须更新数据源以保持一致性。删除该行后,您的数据源似乎没有更新。为了帮助您,您的数据源方法和用于删除行的代码将很有用。

于 2012-12-25T13:27:19.847 回答
0

您的日志意味着4-1 = 3,而不是 4

返回计数时,您必须考虑已删除的行

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

你应该有一个包含你的行数的变量或数组,例如

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.cellsCount;
}

// somewhere else

[tableView beginUpdates];
self.cellsCount--; // here is an important line of code
[tableView deleteRowsAtIndexPaths:indexPath withRowAnimation:UITableViewRowAnimationAutomatic];
[tableView endUpdates];
于 2012-12-25T14:05:04.070 回答