先描述下错误:
Assertion failure in -[UITableView _endCellAnimationsWithContext:]---错误
或者看crash日志错误:
'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (5) must be equal to the number of rows contained in that section before the update (1), 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).’
原因:
1.在调用deleteRowsAtIndexPaths:方法前,要确保数据为最新。也就是说,先将要删除的数据从数据源中删除。
2.分组和分组中行数是变动的,不能写成死的!
3.如果是分组,你会发现很怪的现象:当一个分组中,有多条数据时,你删除其中一条,正确;当一个分组中,你要删除唯一的一条时,仍然会报出如上的错误!
本人,就是百思不得其解。反复调试,数据已经保持最新了的。
在网上搜了很多,却没有满意答案。
灵感闪过!~~~~
删除某个分组中的最后一条数据时,分组数,和行数都要变。这时候,只调用了deleteRowsAtIndexPaths方法。也就是说,只对行数进行了操作,但是没有对变动的分组进行操作!
查看帮助API,找到这么一个方法:deleteSections:方法!
加上去,在删除某个分组中最后一条记录时,将该分组也删除!
搞定!搞定!
[tableView beginUpdates];
if(newCount<=0) {
[tableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationLeft];
}
[tableViewdeleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];
[tableView endUpdates];
或者,考虑下是否在最后一个分组的条件下,需要变换分组的个数,如果没有必要的话,就可以保留 section 的个数。
参考:https://blog.csdn.net/oqqquzi1234567/article/details/8946583
网友评论