我在这个View Controller中有一个UITableView。当我运行应用程序并使用滑动删除功能(比如第3行)时,它会在第一次完美地删除该行。如果我将新数据添加到同一行(第3行),并再次执行滑动删除操作,应用程序崩溃,并给我一个EXC_BAD_ACCESS错误。这是我的代码的一部分:
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath){
if editingStyle == UITableViewCellEditingStyle.Delete {
toDoList.removeObjectAtIndex(indexPath.row)
feedTimes = feedTimes - 1
ft.text = "\(toDoList.count)"
tableView.reloadData()
}
}
任何人都可以解释为什么会这样吗? 谢谢你的时间。
答案 0 :(得分:1)
似乎您的更新值不正确。反复检查。 顺便说一句,在这种情况下,而不是reloadData使用:
performBatchUpdates {
deleteRowsAtIndexPaths
// or
deleteSections
}
相对于你的表结构
答案 1 :(得分:1)
Apple在Inserting and Deleting Rows and Sections文件中建议:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
// If row is deleted, remove it from the list.
if (editingStyle == UITableViewCellEditingStyleDelete) {
SimpleEditableListAppDelegate *controller = (SimpleEditableListAppDelegate *)[[UIApplication sharedApplication] delegate];
[controller removeObjectFromListAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}
我曾经成功使用过这种方法。