我正在尝试将 Firebase 数据库中的数据提取到字典中,但我得到的值为零!我尝试重组我的数据库,以及observe(.value...) 和observe(.childAdded...),但没有任何运气。
这是我的 firebase 数据库结构:
{
"posts" : {
"2017" : {
"Nov" : {
"19" : {
"12:56 PM" : {
"activities" : "jumping, rafting",
"description" : "Hello from the other side",
"location" : "Bucharest, Roamania",
"privacy" : "1",
"title" : "Making papers",
"userID" : "cTq84vE40XhD1EprpxlQUOIwO0q2"
}
}
}
}
},
这是我的获取数据函数:
func fetchPosts() {
refHandle = ref.child("posts").observe(.value, with: { (snapshot) in
if snapshot.childrenCount > 0 {
self.postList.removeAll()
for posts in snapshot.children.allObjects as![DataSnapshot] {
let postObject = posts.value as? [String: AnyObject]
let activities = postObject?["activities"]
let description = postObject?["description"]
let location = postObject?["location"]
let privacy = postObject?["privacy"]
let commentsNr = postObject?["commentsNr"]
let likesNr = postObject?["likesNr"]
let image = postObject?["images"]
let title = postObject?["title"]
let name = postObject?["name"]
let date = postObject?["date"]
let post = Post(title: title as? String, name: name as? String, image: image as? UIImage, info: description as? String, likesNr: likesNr as? Int, privacy: privacy as? Int, location: location as? String, commentsNr: commentsNr as? Int, activities: activities as? String, date: date as? String)
print("A~🤬🤬🤬🤬🤬 \(activities) / \(location)")
self.postList.append(post)
}
}
})
}
}
我做错了什么?我应该重新考虑 firebase 数据库结构,使其易于在程序中访问,还是应该尝试不同的算法来获取数据?
最佳答案
在获取字典之前,您是否打印了快照包含的内容?
对我来说,您的快照从您的 posts
节点开始。然后,当您选择值观察者时,您的快照将仅包含 posts
作为键和所有子值。
如果你想让你的数据库结构保持这样,你需要深入你的节点级别来查询你想要的信息。在此示例中,应该有效的查询可能是:
refHandle = ref.child("posts").child("2017").child("Nov").child("19").child("12:56 PM").observe(.value, with: { (snapshot) in //etc
但我建议您更改数据库结构,因为如果您已阅读有关如何构建数据库的 Firebase 文档,则您必须避免嵌套数据。您需要扁平化数据库结构以拥有最低级别的节点。比如 1 级或最多 2 级:Structure your database
更新:如果您拥有结构良好的 Firebase 数据库,那么您将更容易访问数据。对于我来说,将帖子的时间分开在不同的节点上,这是错误的。仅将时间戳作为帖子的属性。您可以从这样的结构开始:
posts
|-idPost
|-idUser
|-activities
|-postDate
|-etc...All the attributes for a post
关于ios - 从 Firebase 获取数据为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47388618/