[英]Retrieving Data From Firebase Auto Id's - Firebase Swift
I am wanting to capture all the values in my childByAutoId in firebase. Essentially, it stores all the items that a person has shortlisted.我想在 firebase 中捕获我的 childByAutoId 中的所有值。本质上,它存储了一个人入围的所有项目。 However, I do not seem to be capturing this, and I assume it is because I am not calling the snapshot correctly to factor the auto id's.但是,我似乎没有捕捉到这一点,我认为这是因为我没有正确调用快照来考虑自动 ID。
Database:数据库:
userID
-> Favourited
-> Auto Id
-> itemName: x
-> Auto Id
-> itemName: x
-> Auto Id
-> itemName: x
Code:代码:
func retrieveItems() {
guard let userId = Auth.auth().currentUser?.uid else { return }
let ref = Database.database().reference().child("users/\(userId)/Favourited")
ref.observe(.value, with: { (snapshot) in
if snapshot.childrenCount>0 {
self.favUsers.removeAll()
for likes in snapshot.children.allObjects as! [DataSnapshot] {
let likesObject = likes.value as? [String: AnyObject]
let itemName = likesObject!["itemName"]
let likesList = Names(id: likes.key, itemName: itemName as! String?)
self.favUsers.append(likesList)
}
} else {
print("not yet")
}
})
self.favList.reloadData()
}
Could someone have a look and let me know what I may be doing wrong?有人可以看看让我知道我可能做错了什么吗? Thank you!谢谢!
This happens because Firebase loads data asynchronously, and right now you're calling reloadData
before the self.favUsers.append(likesList)
has ever run.发生这种情况是因为 Firebase 异步加载数据,现在您在self.favUsers.append(likesList)
运行之前调用reloadData
。
The call to reloadData
needs to be inside the close/completion handler that is called when the data comes back from Firebase:对reloadData
的调用需要在数据从 Firebase 返回时调用的关闭/完成处理程序内:
ref.observe(.value, with: { (snapshot) in
if snapshot.childrenCount>0 {
self.favUsers.removeAll()
for likes in snapshot.children.allObjects as! [DataSnapshot] {
let likesObject = likes.value as? [String: AnyObject]
let itemName = likesObject!["itemName"]
let likesList = Names(id: likes.key, itemName: itemName as! String?)
self.favUsers.append(likesList)
}
self.favList.reloadData() // 👈 Move this here
} else {
print("not yet")
}
})
I also recommend checking out some of these answers asynchronous data loading in Firebase .我还建议查看Firebase 中的异步数据加载中的一些答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.