ios - 删除子项后,Swift/Firebase Tableview 单元格不刷新

标签 ios swift firebase firebase-realtime-database

我意识到这有点困惑,但我正在通过将教程和引用 Material 中的内容拼凑在一起来学习事物的工作原理。 我的问题是当我从 firebase 中删除节点时,表格 View 不会更新。它已从 firebase 中删除,但单元格仍保留在表格 View 中。虽然下面没有显示,但我尝试在我认为应该去的每个地方添加 mytableview.reload 代码块,但没有成功。欢迎任何意见。

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return eventsList.count

}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = myTableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! ViewControllerTableViewCell
    cell.locationLabel.text = eventsList[indexPath.row].location
    cell.eventTimeLabel.text = eventsList[indexPath.row].dateTime
    cell.eventTypeLabel.text = eventsList[indexPath.row].agencyEventSubtypeCode
    cell.agencyIdLabel.text = eventsList[indexPath.row].agencyId

    if eventsList[indexPath.row].alarmLevel == "1" {
        cell.locationLabel.textColor = UIColor.red
        cell.eventTimeLabel.textColor = UIColor.red
        cell.eventTypeLabel.textColor = UIColor.red
        cell.agencyIdLabel.textColor = UIColor.red
    }
    return cell
}



    ref = Database.database().reference()
    fetchData()
}

func fetchData(){
    refHandle = ref?.child("caddata").observe(.childAdded, with: { (snapshot) in

        if let dictionary = snapshot.value as? [String: Any] {

            let event =  Events()
            event.setValuesForKeys(dictionary)
            if event.originatingAction == "CadEventNew" {
                   self.eventsList.append(event)

                DispatchQueue.main.async {
                    self.myTableView.reloadData()
                }

            } else if event.originatingAction == "CadCloseEvent" {
                self.cadPacketType = event.originatingAction
                self.cadEventNumber = event.agencyEventId
                self.queryCloseUIDFromDB()
            }
        }
    })
}

func queryCloseUIDFromDB(){

    if cadPacketType == "CadCloseEvent" {

        let dataRef = ref?.child("caddata")
        let queryRef = dataRef?.queryOrdered(byChild: "agencyEventId")
            .queryEqual(toValue: cadEventNumber)

        queryRef?.observeSingleEvent(of: .value, with: { (snapshot) in

            for snap in snapshot.children {
                let dataSnap = snap as! DataSnapshot
                self.closeUID = dataSnap.key //the uid of each event

                if self.closeUID != nil {
                    self.deleteFromDB()

                    DispatchQueue.main.async {
                        self.myTableView.reloadData()
                    }
                }
            }
        })
    }
}

func deleteFromDB () {
    if closeUID != nil {
        print (cadEventNumber!)
        print (closeUID!)
        ref?.child("caddata").child(closeUID!).removeValue(completionBlock: { (error, ref) in
            if error != nil {
                self.fetchData()
                print("Error: \(String(describing: error))")
                return
                    }
                })
            }
        print ("\(String(describing: closeUID)) has been removed")
}

最佳答案

删除后需要重新获取数据,

用这个方法替换你的deleteFromDB方法,你的fetchData必须被执行if error == nil

func deleteFromDB () {
    if closeUID != nil {
        print (cadEventNumber!)
        print (closeUID!)
        ref?.child("caddata").child(closeUID!).removeValue(completionBlock: { (error, ref) in
            if error != nil {
                print("Error: \(String(describing: error))")
                return
            }
            //clean the array
            self.eventsList.removeAll()
            self.fetchData()
        })
    }
    print ("\(String(describing: closeUID)) has been removed")
}

关于ios - 删除子项后,Swift/Firebase Tableview 单元格不刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48062777/

相关文章:

firebase - 我应该将图片上传到 Cloud Firestore 还是 Firebase Storage?

javascript - firebase orderby key 与 orderby 时间戳,用于分页

ios - 为什么 TextView.text 为空

ios - 当我们过年时显示每个月的星期和日期列表

c++ - Xcode 找不到 'std' 命名空间

swift - 避免多次跳跃

ios - Swift 中的 CGContextDrawRadialGradient

ios - 带有声音的图像动画

swift - 从一个 View Controller 获取 Facebook 值(电子邮件、姓名等)并将它们传输到另一个 View Controller

javascript - Firebase 函数和 API key