删除的tableviewcell被最后一个单元格替换

时间:2018-05-18 18:31:41

标签: swift uitableview realm cell

我的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)")
        }
    }
}

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

只有在对查询进行排序时,Realm才会保证Results的顺序一致。尝试添加对sorted

的通话
results = realm.objects(Times.self)

变为

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