我想从表格视图中删除一行,但是它不起作用:/
此下一个代码块是通过自定义按钮(而不是内部Apple-Table-Edit)触发的。
self.tableView.beginUpdates()
self.sections[indexPath.section].items.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .automatic)
self.tableView.endUpdates()
这是一个部分的样子:
class Section: Comparable {
var state: TrackingObject.stateEnum
var items: [TrackingObject]
var expanded: Bool
init(state : TrackingObject.stateEnum, items : [TrackingObject], expanded : Bool){
self.state = state
self.items = items
self.expanded = expanded
}
static func group(trackingObjects: [TrackingObject]) -> [Section] {
let groups = Dictionary(grouping: Model.trackingObjects) { (trackingObject: TrackingObject) -> TrackingObject.stateEnum in
return trackingObject.currentState
}
return groups.map { (state: TrackingObject.stateEnum, trackingObjects: [TrackingObject]) in
return Section(state: state, items: trackingObjects, expanded: state == .active_due ? true : false)
}.sorted()
}
}
预期:给定indexPath的行通过动画删除,并在“数据源”(称为self.sections)中删除
实际输出:错误消息:
由于未捕获的异常而终止应用程序 “ NSInternalInconsistencyException”,原因:“试图插入第2行 进入第0部分,但在第0部分之后只有0行 更新”
(我正在删除第0部分的第二行)
答案 0 :(得分:1)
self.sections[indexPath.section].items.remove(at: indexPath.row)
self.tableView.beginUpdates()
DispatchQueue.main.async {
tableView.deleteRows(at: [indexPath], with: .automatic)
self.tableView.endUpdates()
}
尝试在beginUpdates()之前从数据源中删除项目。您还可以从数据源中删除项目并重新设置表格视图,因为您将动画选项设置为自动,因此表格视图将执行首选的动画。