gpt4 book ai didi

swift - firebase swift tableview在获取数据时加倍

转载 作者:行者123 更新时间:2023-11-30 11:36:16 25 4
gpt4 key购买 nike

我是 swift 编程的新手。

我目前正在为我的应用程序制作收件箱提要。我可以从 firebase 获取我的值并轻松地将它们显示在 UITableView 中,但我的问题来自于我从 firebase 添加或删除子节点时。

我的问题:当我在收件箱 View Controller 中收到一条新消息时,我的数据量会增加一倍。不在我的 firebase 中,但在我的列表中。

我尝试过:我尝试过 list.removeAll()每次修改我的 firebase 子值时,在我的 fetchRequests 函数中 ref.observe(.value //...) 。另外,当我尝试ref.observe(.childAdded //...)时我打开我的 inboxViewController,什么也没有出现。

我的代码:

func FetchRequests() {

self.requestList.removeAll()

let ref = Database.database().reference().child("Users").child(userID!).child("Requests")

ref.observe(.value, with: { (snapshot) in
for child in snapshot.children.allObjects as! [DataSnapshot] {
if let value = child.value as? NSDictionary {

let req = Requests()

req.from = value["from"] as? String ?? "From unknown"
req.name = value["name"] as? String ?? "Erreur"
req.img = value["img"] as? String ?? "Erreur"
req.other = value["other"] as? String ?? "Erreur"
req.type = value["type"] as? String ?? "Erreur"
req.key = child.key

self.requestList.append(req)
DispatchQueue.main.async {
self.tableViewRequests.reloadData()
}
}
}
}, withCancel: nil)
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

let ref = Database.database().reference().child("Users").child(userID!).child("Requests").child(requestList[indexPath.row].key!)

let reqType = requestList[indexPath.row].type

if reqType?.range(of:"Réponse") != nil {
print("Answer from admin")
requestList.remove(at: indexPath.row)
ref.removeValue()
}

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

我想要什么:只是为了在收件箱 Controller 中收到新消息时消除重复问题。

顺便说一句,我正在使用 swift 4,提前致谢,祝你有美好的一天/晚上/夜晚!

最佳答案

您应该在for 循环结束后重新加载您的表格数据。只需修改您的代码如下:

func FetchRequests() {
self.requestList.removeAll()
let ref = Database.database().reference().child("Users").child(userID!).child("Requests")
ref.observe(.value, with: { (snapshot) in
for child in snapshot.children.allObjects as! [DataSnapshot] {
if let value = child.value as? NSDictionary {
let req = Requests()
req.from = value["from"] as? String ?? "From unknown"
req.name = value["name"] as? String ?? "Erreur"
req.img = value["img"] as? String ?? "Erreur"
req.other = value["other"] as? String ?? "Erreur"
req.type = value["type"] as? String ?? "Erreur"
req.key = child.key
self.requestList.append(req)
}
}
DispatchQueue.main.async {
self.tableViewRequests.reloadData()
}
}, withCancel: nil)
}

关于swift - firebase swift tableview在获取数据时加倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49738491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com