调用deleteRowsAtIndexPaths时,UITableView上的断言失败

时间:2015-08-09 10:59:57

标签: ios swift uitableview

我有两个表视图,按下按钮可以从中将数据从table1移动到table2。

当选择单元格时,会出现一个复选标记,按下该按钮会发生以下情况:

  • 从数组数据源中删除对象
  • 致电deleteRowsAtIndexPaths

我的问题是,当数据传输到table2时,数据仍然具有table2单元格的复选标记。我想重置它,但在每个地方我都试图迭代对象数组并将复选标记设置为false,当调用deleteRowsAtIndexPaths时会发生以下错误:

Assertion failure in -[UITableView _endCellAnimationsWithContext:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3491.2.5/UITableView.m:1717

有谁知道为什么会这样?

2 个答案:

答案 0 :(得分:1)

在通知视图任何更改之前更新数据源至关重要。视图方法假定您的数据源包含当前正确的数据。如果没有,表格视图可能会从您的数据源收到错误的项目集,或者询问不存在的项目并使您的应用程序崩溃。

尝试按此顺序执行:

  • 将表A中的对象复制到新项目中(未选中属性)
  • 从表A的数组数据源中删除对象
  • 为表A调用deleteRowsAtIndexPaths
  • 将步骤1中复制的对象插入表B的数据源
  • 重装表B

还提供将项目插入表B的代码可能会有所帮助。

祝你好运。

答案 1 :(得分:0)

  

我尝试迭代对象数组并将复选标记设置为false

这不是你做的方式。

在cellAtRowIndexPath中,您应该有条件来显示或隐藏复选标记。

删除单元格时,也要从数据源中删除并重新加载tableView。非常重要:

[self.tableView reloadData];