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