【问题标题】:Read data from firebase swift从 firebase swift 读取数据
【发布时间】:2017-01-30 10:00:30
【问题描述】:

我正在尝试从 firebase 数据库中检索数据,但是当我运行代码时它什么也不显示,尽管没有显示错误

我从 Firebase 手册中得到了这段代码,顺便说一下,我很确定路径是正确的

let ref = FIRDatabase.database().reference()

ref.child("users").child("user").child(username).observeSingleEvent(of: .value, with: { (snapshot) in
        // Get user value
        let value = snapshot.value as? NSDictionary
        let score = value?["score"] as? String ?? ""
        print(score)

        // ...
    }) { (error) in
            print(error.localizedDescription)
}

JSON

{
  "users" : {
    "user" : {
      "e1410kokeZS8xv81J1RzhN4V2852" : {
        "email" : "aaaa@gmail.com",
        "score" : 0,
        "username" : "Afnan"
      },
      "jPx8XJ3Q9AazDM7qIOhz02PBfh22" : {
        "email" : "aaaa@ggg.com",
        "score" : 13,
        "username" : "ghhh"
      }
    }
  }
}

【问题讨论】:

  • 你能展示你的 Firebase 结构吗?另外您是否期望特定用户名的分数?
  • 我为 JSON 结构编辑了我的问题。是的,我想检索特定用户的分数,用户名是一个保存该用户 ID 的变量

标签: swift firebase firebase-realtime-database


【解决方案1】:

您正在侦听 .value 事件,但您的块一次处理一个项目,因此请使用 .childAdded 事件。

let ref = FIRDatabase.database().reference().child("users").child("user").child(username)

ref.observeSingleEvent(of: .childAdded, with: { (snapshot) in
     if let userDict = snapshot.value as? [String:Any] {
          //Do not cast print it directly may be score is Int not string
          print(userDict["score"]) 
     }
})

注意:在 Swift 中使用原生 Dictionary 而不是 NSDictionary

【讨论】:

  • 仍然没有显示,我在控制台中得到了这个: [Firebase/Database][I-RDB03428] 使用未指定的索引。考虑将 /users/user 中的 ".indexOn": "username" 添加到您的安全规则中以获得更好的性能
  • 这是一个随机生成的ID,抱歉这个混淆变量
  • @Yousefhumdan print(snapshot.value) 的日志是什么?
  • 当我在文本字段中打印分数时失败了,我该怎么办?
  • @it failed 是什么意思?用你当前的代码编辑你的问题以及它的失败之处。
猜你喜欢
  • 2018-03-26
  • 1970-01-01
  • 1970-01-01
  • 2020-06-23
  • 2020-01-28
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多