UITableView调用deleteRowsAtIndexPaths错误

先描述下错误:

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似...
    liudhkk阅读 9,088评论 3 38
  • 原因: 1.在调用deleteRowsAtIndexPaths:方法前,要确保数据为最新。也就是说,先将要删除的数...
    FengxinLi阅读 3,429评论 0 3
  • 写作背景 如果算上三年“软件体系结构”方向的研究生阶段,我在软件开发和软件项目管理领域已经工作了13年之久。随着工...
    扁圆柱体阅读 2,657评论 0 4
  • 有多少人能直面死亡 它 似乎很遥远 又近乎无处不在 它是天灾残酷无情的镇压 人如同撼树蚍蜉 隔着废墟的凝望 深沉...
    千文小夭阅读 428评论 0 2
  • 队长生日(二) 队长者,吾姨老表也!婚已两载,与妻闲谈中忽忆起明日乃老表生日矣...
    杨书海阅读 177评论 0 0