ios - 从 Firebase 获取数据为零

标签 ios swift firebase firebase-realtime-database

我正在尝试将 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/

相关文章:

ios - JSON 解码失败

ios - 新站推送和执行代码

ios - 当用户返回 View Controller 时重新加载 Collection View 数据

ios - 在 Firebase 身份验证中使用 Google 登录后如何顺利地执行 segue 到 View Controller

swift - 为什么自己没有解决?

java - 如何在android中从Firebase获取List的值?

javascript - Firebase:如何在javascript中读取来自不同 child 的 child ?

ios - Sprite Kit 低性能,一个位置有多个节点

ios - 为 webView 添加 swipeGesture 并停止 ZoomIn 和 ZoomOut

javascript - 登录时从用户集合中获取用户数据