【问题标题】:Error when Removing Row from TableView (Swift)从 TableView (Swift) 中删除行时出错
【发布时间】: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 现在我得到一个“索引超出范围”-错误,我将可重复使用的单元格出列

标签: ios swift xcode


【解决方案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() 之前从数据源中删除项目。您也可以在将动画选项设置为自动时从数据源中删除项目并重新加载表格视图,因此表格视图将执行更可取的动画。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多