滑动以删除表格视图中具有多节的行吗?

时间:2020-02-27 11:55:14

标签: ios swift uitableview tableview

我有一个包含两个部分的表格视图

我添加了滑动以删除行

但是应用崩溃导致选择当前indexPath出错

我尝试了两种不同的方法,但是这些都不起作用

//the code
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
    let contextItem = UIContextualAction(style: .destructive, title: "Delete") {  (contextualAction, view, boolValue) in
        switch indexPath.section{
        case 0:
            //1 i tried this
            self.tableView.deleteRows(at: [indexPath], with: .automatic)
        case 1:
            //2 and i tried this
            self.tableView.deleteRows(at: [IndexPath(row: indexPath.row, section: 1)], with: .automatic)
        default:break
        }

        boolValue(true)
    }
    let swipeActions = UISwipeActionsConfiguration(actions: [contextItem])
    return swipeActions
}

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
    return true
}

结果显示:“由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效的更新:第1节中的行数无效。更新(5)后现有节中包含的行数必须相等到更新之前该部分中包含的行数(5),加上或减去从该部分中插入或删除的行数(插入0,删除1),以及加上或减去移入或删除该行的行数部分(移入0,移出0)。'“

1 个答案:

答案 0 :(得分:2)

由于未捕获的异常而终止应用程序 “ NSInternalInconsistencyException”,原因:“无效的更新:无效 第1节中的行数。 更新(5)之后的现有部分必须等于 更新(5)之前该部分中包含的行,正负 从该部分插入或删除的行数(已插入0, 1个已删除),加上或减去移入或移出的行数 该部分(0移入,0移出)。'

它说出您必须做的确切事情。请记住,删除数据时,您需要使 DATASOURCE 的计数等于行deleteRowsdeleteSections之后的行和节的计数。

这意味着您需要在调用这些方法之前操纵数据源数组。而且在使用多节时,请记住要同时使用sectionrow以及删除和插入数据时仔细访问数据源。

func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {

        let contextItem = UIContextualAction(style: .destructive, title: "Delete") {  (contextualAction, view, boolValue) in

            let section = indexPath.section
            let row = indexPath.row

            self.data[section].remove(at: row)
            self.tableView.deleteRows(at: [indexPath], with: .automatic)

            boolValue(true)
        }

        let swipeActions = UISwipeActionsConfiguration(actions: [contextItem])


        return swipeActions
    }