从TableView删除行时出错(快速)

时间:2018-12-26 14:06:04

标签: ios swift xcode

我想从表格视图中删除一行,但是它不起作用:/

此下一个代码块是通过自定义按钮(而不是内部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部分的第二行)

1 个答案:

答案 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()之前从数据源中删除项目。您还可以从数据源中删除项目并重新设置表格视图,因为您将动画选项设置为自动,因此表格视图将执行首选的动画。