我有一个UITableView
我正在使用commit editingStyle函数在向左滑动时移除一个单元格。问题是,当我这样做时,它删除了firebase中的正确数据,但随后它再次更新它并且应用程序崩溃。这就是我得到的。
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
let taskToDelete = groupTask[indexPath.row]
if editingStyle == UITableViewCellEditingStyle.delete {
groupTask.remove(at: indexPath.row)
DataService.instance.REF_GROUPS.child(group!.key).child("task").child(taskToDelete.id).removeValue(completionBlock: { (error, refer) in
if error != nil {
} else {
}
})
self.tableView.reloadRows(at: [indexPath], with: UITableViewRowAnimation.automatic)
}
}
当你点击一个单元格来更新firebase中的一个孩子然后显示一个图像时,我也有一个功能。可能是导致崩溃的函数:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
guard let cell = tableView.cellForRow(at: indexPath) as? GroupTaskCell else { return }
if cell.isSelected == true {
let selected = groupTask[indexPath.row]
DataService.instance.REF_GROUPS.observe(.value) { (snapShot) in
DataService.instance.updateTaskStatus(desiredGroup: self.group!, selected: true, childPath: selected.id, handler: { (complete) in
self.tableView.reloadData()
})
}
} else {
}
self.tableView.reloadData()
}
func updateTaskStatus(desiredGroup: Group, selected: Bool, childPath: String, handler: @escaping (_ taskArray: [Task]) -> ()) {
REF_GROUPS.child(desiredGroup.key).child("task").child(childPath).updateChildValues(["selected": selected])
}
关于如何解决这个问题的任何想法?
答案 0 :(得分:0)
你应该标记
for (i in 1:nrow(df)){
if (df$user_id[i] != df$user_id[i+1]){
df$time[i] <- NA
}else{
df$time[i] <- difftime(df$timestamp[1+i],df$timestamp[i],units = "secs")
}
}
self.tableView.reloadRows(at: [indexPath], with: UITableViewRowAnimation.automatic)
和self.tableView.beginUpdates()
所以它应该是这样的
self.tableView.endUpdates()
并确保您没有立即重新加载数据,因为它会导致崩溃。我认为您根本不应该重新加载数据,只需确保从tableView中删除单元格以及从Firebase中删除数据,这应该足够了。您可以在下次检索数据或显示tableView
时重新加载tableView