删除UITableViewCell时更新firebase中的数据

时间:2018-01-18 14:06:30

标签: ios swift uitableview firebase firebase-realtime-database

我有一个UITableView我正在使用commit editingStyle函数在向左滑动时移除一个单元格。问题是,当我这样做时,它删除了firebase中的正确数据,但随后它再次更新它并且应用程序崩溃。这就是我得到的。

Firebase, before Firebase, after

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])
    }

关于如何解决这个问题的任何想法?

1 个答案:

答案 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