同时删除Firestore文档和Tableview单元

时间:2020-10-14 17:46:45

标签: swift google-cloud-firestore tableview

我的应用程序中具有消息传递功能,因此我有一个包含所有消息的文档集合和另一个集合,用于保存来自不同用户的最新消息。

在View Controller中,我具有一个显示所有最近消息的表格视图,当我使用函数删除单元格时,所有数据都会按照我希望在Firestore中的方式删除。

我还将其从数组中删除并删除该行。

我的问题是,即使从Firestore中删除了数据,也无法同时删除该单元格。

当我第二次在模拟器中运行我的应用程序时,单元格已被删除

有人知道为什么不能立即移除电池

func deleteMessages(currentUid: String, userUid: String) {
    db.collection("messages").document(currentUid).collection(userUid).getDocuments { (snapshot, Error) in
        
        if let er = Error {
            
            print(er)
            
        } else {
            guard let snapshot = snapshot?.documents else {return}
            for snap in snapshot {
                
                let message = Message(dictionary: snap.data())
                let docId = message.docId
                
                db.collection("messages").document(currentUid).collection("recentMessages").document(userUid).delete()
                db.collection("messages").document(currentUid).collection(userUid).document(docId).delete()
                
            }
            
        }
    }
} 


func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
    
    guard let currentUid = Auth.auth().currentUser?.uid else {return}
    let userUid = chats[indexPath.row].user.userUid
    
    if editingStyle == .delete {
        tableView.beginUpdates()
        self.chats.remove(at: indexPath.row)
      
        deleteMessages(currentUid: currentUid , userUid: userUid)
        
        tableView.deleteRows(at: [indexPath], with: .fade)
        tableView.endUpdates()
    }
    
    
}

func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle {
    return .delete
}

1 个答案:

答案 0 :(得分:0)

删除后,您需要在mainQueue中调用tableView.reloadData()