如果我删除行太快,UITableView会崩溃

时间:2015-08-28 06:02:48

标签: ios objective-c iphone

我有一个带有UITableView的应用程序,它可以使用行动作删除单元格。但是,如果我快速连续两次,应用程序崩溃了BAD_EXEC。

问题显然与时间有关。我要求桌子在完成之前做一些其他事情。它可能是动画,也可能是细胞的移除。

无论哪种方式,在我开始之前在tableview上调用reloadData似乎都可以修复它。这个解决方案有两个问题。

首先,reloadData干扰了通常的行删除动画的一些优点。这并不是什么大事,但我更喜欢所有动画完好无损。

其次,我仍然不完全了解正在发生的事情。

任何人都可以帮助我理解和/或建议更好的解决方案吗?

这是代码......

-(void) rowActionPressedInIndexPath: (NSIndexPath *)indexPath timing:(Timing) doTaskWhen
{
    [self.tableView reloadData]; // This is my current solution

    [self.tableView beginUpdates];

    ToDoTask *toDo = [self removeTaskFromTableViewAtIndexPath:indexPath];
    toDo.timing = doTaskWhen;  // Just some data model updating. Has no effect on anything else here.

    [self.tableView endUpdates];
}

如果我需要删除整个部分或行,removeTaskFromTableView主要是代码。我已经确认该应用程序做出了正确的选择,并且该错误无论如何都有效,因此该方法中唯一相关的行是...

[self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];

编辑:我注意到系统提供的标准删除行动作不允许我快速移动。有一个内置的延迟(可能)可以防止这个确切的问题。

1 个答案:

答案 0 :(得分:0)

-(void) rowActionPressedInIndexPath: (NSIndexPath *)indexPath timing:(Timing) doTaskWhen
{
   // [self.tableView reloadData]; // This is my current solution

    [self.tableView beginUpdates];

    ToDoTask *toDo = [self removeTaskFromTableViewAtIndexPath:indexPath];
    toDo.timing = doTaskWhen;  // Just some data model updating. Has no effect on anything else here.

    [self.tableView endUpdates];
}

或尝试在主线程中重新加载表视图。