我有一个UITableViewCell
和一个BEMCheckBox
,我想在按下确定的点击时删除单元格,这是我的代码:
func didTap(_ checkBox: BEMCheckBox) {
let index = tableView?.indexPath(for: self)
MenuViewController().products.removeObject(forKey: "Product\(index!.row)") // removes the cell from the database of the tableview
tableView?.deleteRows(at: [index!], with: .fade)
}
以下是我获取tableView
的方法:
extension UIView {
func parentView<T: UIView>(of type: T.Type) -> T? {
guard let view = self.superview else {
return nil
}
return (view as? T) ?? view.parentView(of: T.self)
}
}
extension UITableViewCell {
var tableView: UITableView? {
return self.parentView(of: UITableView.self)
}
}
我得到了以下错误:
因未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效更新:第0节中的行数无效。更新后的现有部分中包含的行数(2)必须等于行数在更新(2)之前包含在该部分中,加上或减去从该部分插入或删除的行数(插入0,删除1)并加上或减去移入或移出该部分的行数(0移入,0搬出去。'
答案 0 :(得分:0)
它与您的数据源相关。您的数据源未相应更新。您应该在重新加载UITableview
之前检查您的数据源。它是由于数据项计数不匹配而发生的。
答案 1 :(得分:0)
您需要通知表视图您即将修改项目数:
tableView?.beginUpdates()
// Perform the item and cell removal
tableView?.endUpdates()
始终确保在数据源中插入/删除与表视图的单元格数相同数量的项目。
您可以查看decoumentation here