我有一个包含两个部分的表格视图
我添加了滑动以删除行
但是应用崩溃导致选择当前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)。'“
答案 0 :(得分:2)
由于未捕获的异常而终止应用程序 “ NSInternalInconsistencyException”,原因:“无效的更新:无效 第1节中的行数。 更新(5)之后的现有部分必须等于 更新(5)之前该部分中包含的行,正负 从该部分插入或删除的行数(已插入0, 1个已删除),加上或减去移入或移出的行数 该部分(0移入,0移出)。'
它说出您必须做的确切事情。请记住,删除数据时,您需要使 DATASOURCE 的计数等于行deleteRows
或deleteSections
之后的行和节的计数。>
这意味着您需要在调用这些方法之前操纵数据源数组。而且在使用多节时,请记住要同时使用section
和row
以及删除和插入数据时仔细访问数据源。
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
}