【问题标题】:Deleted tableviewcell gets replaced by last cell删除的 tableviewcell 被最后一个单元格替换
【发布时间】:2018-05-18 18:31:41
【问题描述】:

我的 tableView 出现问题,其中填充了领域对象。当我删除一个单元格时,tableView 的最后一个单元格会跳转到已删除单元格的位置。有谁知道这种行为可能是什么原因?

 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == UITableViewCellEditingStyle.delete{

        self.updateModel(at: indexPath)
        self.loadTimes()
    }
}

func loadTimes(){

    results = realm.objects(Times.self)
    tableView.reloadData()
}

 func updateModel(at indexpath: IndexPath) {
    if let itemForDeletion = results?[indexpath.row] {
        do{
            try self.realm.write {
                self.realm.delete(itemForDeletion)
            }
        } catch {
            print("Error saving context \(error)")
        }
    }
}

【问题讨论】:

  • 跳跃是什么意思?表格视图是否滚动到意外位置或什么?
  • @Mika 表格视图的最后一个单元格/行正在替换已删除的单元格/行。因此,与往常不同的是,已删除行的下一行正在替换它,它始终是 tableview 的最后一行。首先我认为是因为 RealmBrowser 也在做同样的事情,但在我的其他项目中它对 tableview 没有影响。

标签: swift uitableview realm cell


【解决方案1】:

Realm 仅在对查询进行排序时保证 Results 的顺序一致。尝试添加电话到sorted

results = realm.objects(Times.self)

变成

results = realm.objects(Times.self).sorted(byKeyPath: "time")

【讨论】:

    【解决方案2】:

    可能是因为您正在更新(或删除)然后您将表视图加载到全局线程中。您没有使用异步方法,因此它们不是按顺序运行的。 尝试创建一个 let group = DispatchGroup() 并在加载或删除之前执行 group.enter() 并在完成更新(或删除)后创建 group.leave() 并进入下一个加载方法。

    但是,请尝试在插入或更新领域对象时使用闭包创建异步方法。分开职责。

    【讨论】:

    • 非常感谢您的回答,但不幸的是 tableView 仍然在做同样的事情
    猜你喜欢
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多