【问题标题】:how to delete UITableView Cell after document gets removed from Firestore console从 Firestore 控制台中删除文档后如何删除 UITableView Cell
【发布时间】:2021-06-27 12:13:38
【问题描述】:

自从现在开始我的项目以来,我没有找到任何关于如何从外部源删除 UITableView 单元格的答案,我在这里苦苦思索如何从我的 FireStore 云存储中删除 UITableview 行或单元格,我想从数组中删除值并删除该单元格而不使用 canEditRowAt indexPath 因为我想在
中删除它 还有一件事我不知道如何将字典与数组一起使用,我不知道在这种情况下是否必须使用它

struct accepteddriverData {

var driverName: String
var userPhone: String
var username: String
var driverPhone: String

}


func driverSelected(arg: Bool, completion: (Bool) -> ()){
guard let driverid = Auth.auth().currentUser?.uid else {return}
        let firestore = Firestore.firestore()
        let doc = firestore.collection("offers").whereField("driverUid", isEqualTo: driverid).whereField("selected", isEqualTo: true)
        doc.addSnapshotListener { (querysnap, err) in
            if err != nil {
                print(err?.localizedDescription ?? "")
            }
            querysnap?.documentChanges.forEach({ (change) in
                
                self.DriverData = []

                if (change.type == .added) {
                    
                    
                let snap = change.document.data()

                let driverName = snap["driverName"] as? String ?? ""
                let userPhone = snap["userPhone"] as? String ?? ""
                let username = snap["userName"] as? String ?? ""
                let driverPhone = snap["driverPhone"] as? String ?? ""

               let accepted = accepteddriverData(driverName: driverName, userPhone: userPhone, username: username, driverPhone: driverPhone)

               self.DriverData.append(accepted)
                    
                DispatchQueue.main.async {
                self.DriverOrdersTV.reloadData()
                            
                }
}
                if (change.type == .removed){ // i want to delete tableView cell on this statement
                    let id = change.document.documentID
                    let snap = change.document.data()
                    print(id)
                    print(snap)
                    
                }
                    
            })
}
completion(arg)
}

【问题讨论】:

    标签: ios swift uitableview google-cloud-firestore


    【解决方案1】:

    添加到您的模型

    var docId: String
    

    然后在里面

    if (change.type == .removed){  
       let id = change.document.documentID
       self.DriverData.removeAll(where:{ $0.docId == id })
       // refresh table
     }
                 
    

    【讨论】:

    • 为什么 var docId: int 是一个整数,而 Firestore documentId 是一个 String + 时调用 removeAll 我所有的 tableview 单元格都被删除了
    • 我必须将哪个值分配给var docId: int
    • 分配change.document.documentID
    • 是否有任何其他解决方案,或者我是否必须使用它,因为它仍然会删除我所有的单元格,即使是在调用tableView.reloadData()后具有不同 ID 的单元格
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 2021-10-16
    • 1970-01-01
    • 2020-12-11
    • 2021-08-23
    • 1970-01-01
    相关资源
    最近更新 更多