使用editActionsForRowAtIndexPath删除行“UITableView内部错误”

时间:2015-10-23 13:02:42

标签: ios swift uitableview xcode7

我需要在editActionsForRowAtIndexPath中创建一个动作来删除表中的行。在互联网上进行了一些研究之后,我来到了这段代码:

func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {


        let remove = UITableViewRowAction(style: UITableViewRowActionStyle.Destructive, title: "Remover", handler: { (action: UITableViewRowAction, indexPath: NSIndexPath) -> Void in
            self.tableData.removeObjectAtIndex(indexPath.row)
            tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)

        })

        return [remove]
    }

但现在我收到此错误

  

UITableView内部错误:无法生成新的剖面图   旧节数:1和新节数:0

3 个答案:

答案 0 :(得分:7)

UITableView删除行时,需要注意两件事。

首先,只有在已从数据源中删除对象后才应调用tableView.deleteRowsAtIndexPaths。因为它会再次检查计数并确保结果数据源的值减少一个。

现在要记住的第二件事是没有。删除最后一行后,section不能为0。如果要返回0到numberOfSectionsInTableView,则至少在空行计数上返回1。另一种选择是在删除最后一行时实际删除索引。

答案 1 :(得分:1)

您不需要使用' editActionsForRowAtIndexPath'方法,除非你实现自己的自定义附件视图,但其他方面你可以使用标准滑动左手势删除行,并调用委托是commitEditingStyle

override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if editingStyle == .Delete {
        tableData.removeObjectAtIndex(indexPath.row)
        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
    }
    else if editingStyle == .Insert {
        //edit cell
    }
}
//change the default 'Delete' text
override func tableView(tableView: UITableView, titleForDeleteConfirmationButtonForRowAtIndexPath indexPath: NSIndexPath) -> String? {
    return "Show this instead of delete"
}

答案 2 :(得分:0)

执行deleteRowsAtIndexPaths或reloadData,但不能同时执行这两项操作。