我有一个带有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];
编辑:我注意到系统提供的标准删除行动作不允许我快速移动。有一个内置的延迟(可能)可以防止这个确切的问题。
答案 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];
}
或尝试在主线程中重新加载表视图。