从Detailview中删除Tableview的行

时间:2012-12-25 13:10:22

标签: iphone ios uitableview

我在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).'

3 个答案:

答案 0 :(得分: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];

(根据此link,您应该避免NSInternalInconsistencyException。)

答案 1 :(得分:0)

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

答案 2 :(得分: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];