从 Firebase Auto Id 中检索数据 - Firebase Swift
Posted
技术标签:
【中文标题】从 Firebase Auto Id 中检索数据 - Firebase Swift【英文标题】:Retrieving Data From Firebase Auto Id's - Firebase Swift 【发布时间】:2021-11-28 10:07:44 【问题描述】:我想在 firebase 中捕获 childByAutoId 中的所有值。本质上,它存储了一个人入围的所有项目。但是,我似乎没有捕捉到这一点,我认为这是因为我没有正确调用快照来分解自动 ID。
数据库:
userID
-> Favourited
-> Auto Id
-> itemName: x
-> Auto Id
-> itemName: x
-> Auto Id
-> itemName: x
代码:
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()
有人可以看看,让我知道我可能做错了什么吗?谢谢!
【问题讨论】:
【参考方案1】:发生这种情况是因为 Firebase 异步加载数据,而现在您在 self.favUsers.append(likesList)
运行之前调用了 reloadData
。
对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")
)
我还建议您查看其中一些答案asynchronous data loading in Firebase。
【讨论】:
啊哇,我不敢相信我错过了!非常感谢您的解释和链接!以上是关于从 Firebase Auto Id 中检索数据 - Firebase Swift的主要内容,如果未能解决你的问题,请参考以下文章
Firebase 在 Swift 中检索低于自动 ID 的数据