swift - 从 Firebase Auto Id 中检索数据 - Firebase Swift
问题描述
我想在 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()
}
有人可以看看,让我知道我可能做错了什么吗?谢谢!
解决方案
发生这种情况是因为 Firebase 异步加载数据,而现在您在运行reloadData
之前调用self.favUsers.append(likesList)
。
调用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")
}
})
我还建议在 Firebase 中查看其中的一些答案异步数据加载。
推荐阅读
- r - ggplot2:多面图中的多条趋势线
- c++ - C++回调定时器实现
- c# - EF 快速调用并从存储过程返回,但随后将其转换为列表需要 20 秒来处理 1000 条记录
- ruby-on-rails - 如何解决 `false.blank?` 在 ruby on rails 中遇到的问题?
- php - 将 php 变量传递到 Twig - 文档抛出错误
- python - 这个 Ruby 代码在 Python 中的等价物是什么?
- python - 过滤包含元组的列表列表
- javascript - 如何在查找 Javascript 文件时解决命令提示符中的 SQL ECONNREFUSED 错误?
- c - 多子部分加法的流程API
- r - 如何在ggplot方面按值排序数据