删除单元格时出现异常

时间:2012-01-31 01:36:44

标签: iphone objective-c

我给了我的手机两种颜色。

cell.contentView.backgroundColor = indexPath.row % 2 ? [UIColor whiteColor] : [UIColor blackColor] ;

现在,当我删除一行时,说我删除了包含黑色的单元格,那么将有2行包含白色。所以我试着刷新一行;

[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:YES];

这有效,但当我删除所有记录时,我得到以下异常;这是为什么?

Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-1448.89/UITableView.m:961 and

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0. Attempt to delete more rows than exist in section.'

我的代码;

[self.tableView beginUpdates];
[self.myArray removeObjectsInArray:discardedItems ]; 
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil]  withRowAnimation:YES];     
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil]  withRowAnimation:YES];  
[self.tableView endUpdates];

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

它认为你的行数比你多。尝试这样的事情......

[self.tableView beginUpdates];
[self.myArray removeObjectsInArray:discardedItems ]; 
[self.tableView reloadData];
[self.tableView endUpdates];

由于tableview的数据委托的性质,一旦你修改了数据模型,其余部分就应该遵循。

答案 1 :(得分:0)

好吧,我们假设您的阵列中有6个对象,每个对象对应于每个单元格的数据源。因此,调用委托方法,您可以实际编辑行并将其删除,因此您现在最终会有5个对象。我一直做的工作就像魅力一样,首先用数据源重新调整数组大小,然后更新视图。

//Remove the data    
[self.myArray removeObjectsInArray:discardedItems ]; 
//Update the view
[self.tableView beginUpdates];
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil]  withRowAnimation:YES];     
[self.tableView endUpdates];

除非您需要重新加载数据,这意味着某些数据源发生了变化,否则您可能不应该调用更新方法。可能会发生异常,因为您在更新UITableView之前尝试从数组的第六个元素中获取信息。

希望这会奏效。