【发布时间】:2019-05-24 18:45:49
【问题描述】:
我想从表格视图中删除一行,但它不起作用:/
下一个代码块由自定义按钮(而不是内部 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 节中的第二行)
【问题讨论】:
-
好吧,我认为您不需要执行 self.tableView.beginUpdates() 和 self.tableView.endUpdates()...。您可以删除它再试一次吗?
-
没有解决,但我认为你是对的......我不需要那些
-
尝试将它们全部包装在 dispatchQueue.main.async {}
-
@Tobi 现在我得到一个“索引超出范围”-错误,我将可重复使用的单元格出列