删除 UITableViewCell 时更新 firebase 中的数据

Posted

技术标签:

【中文标题】删除 UITableViewCell 时更新 firebase 中的数据【英文标题】:Updating data in firebase when deleting a UITableViewCell 【发布时间】:2018-01-18 14:06:29 【问题描述】:

我有一个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])
    

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

【问题讨论】:

【参考方案1】:

你应该标记 self.tableView.reloadRows(at: [indexPath], with: UITableViewRowAnimation.automatic)self.tableView.beginUpdates()self.tableView.endUpdates()

所以应该是这样的

self.tableView.beginUpdates()
self.tableView.reloadRows(at: [indexPath], with: UITableViewRowAnimation.automatic)
self.tableView.endUpdates()

并确保您没有立即重新加载数据,因为这会导致崩溃。我认为您根本不应该重新加载数据,只需确保从 tableView 中删除单元格并从 Firebase 中删除数据就足够了。您可以在下次检索数据或呈现 tableView 时重新加载 tableView

【讨论】:

我试过了,但还是有同样的问题。还有其他想法吗? 你想在 didSelectCellForRow 上做什么?您是在重新加载数据还是呈现新视图? 我正在更新 firebase 中的一个孩子。看开头的图片(链接)

以上是关于删除 UITableViewCell 时更新 firebase 中的数据的主要内容,如果未能解决你的问题,请参考以下文章

删除时的 UITableViewCell 不会移动 UITableViewCell 的 contentView

滚动时更新 UITableViewCell

Swift - 更新 UILabel 文本时 UITableViewCell 跳转

滑动删除 UITableViewCell 时,偶尔会出现红色减号删除图标

将视图添加到 UIStackView 后 UITableViewCell 不更新高度

UITableViewCell 不尊重 shouldIndentWhileEditing = NO?