我给了我的手机两种颜色。
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];
我该如何解决这个问题?
答案 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
之前尝试从数组的第六个元素中获取信息。
希望这会奏效。