我是快速编程的新手。
我目前正在为我的应用程序处理收件箱Feed。我可以从firebase获取我的值并轻松地在UITableView中显示它们但我的问题来自于我从firebase添加或删除子节点时。
我的问题:当我在收件箱视图控制器中并收到新邮件时,我的数据会翻倍。不是在我的火力库中,而是在我的列表中。
我做了什么:每次修改firebase子值list.removeAll()
时,我在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()
}
}
我想要什么:在我的收件箱控制器中收到新邮件时,只需删除重复问题。
我顺便使用swift 4, 提前致谢, 有一个美好的一天/傍晚/晚上!
答案 0 :(得分:0)
您可以在observe
函数中将observeSingleEvent
更改为fetch requests
。
在获取完成后,您可以添加observe add child
事件并仅接收新对象。
答案 1 :(得分:0)
循环结束后,应重新加载您的表 数据。只需如下修改您的代码:
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)
}