【问题标题】:How to retrieve nested nodes from Firebase realtime database to iOS app如何将嵌套节点从 Firebase 实时数据库检索到 iOS 应用程序
【发布时间】:2021-07-26 09:20:54
【问题描述】:

我正在构建一个简单的应用程序,用于存储和检索 firebase 实时数据库中的数据。目前我的数据库有一个用户的这些数据。 Database content

这是我用来插入数据的代码。

 let ref = Database.database().reference()
    let user = ref.child("bill")
    user.setValue(["name":"Bill gates"])
    user.child("Request/One").setValue(["Phno":" ","Message":" "])

如您所见,我正在插入一个包含空值的字典,因为我不知道如何创建一个没有任何数据的子节点。

每当将新节点作为子节点添加到请求节点时,我都会尝试完全检索数据库的请求部分。

这是我的检索代码

   user.observe(.childAdded) { (DataSnapshot) in
        
        for case let  i as DataSnapshot in DataSnapshot.children
        {
            guard let dict = i.value as? [String:Any] else{print("Error"); return}
            let a = dict["Message"] as? String
            let b = dict["Phno"] as? String
            print(a!)
            print(b!)
        }
    }

但在上面的代码中,当我在数据库中显式添加新节点时,它不会被调用

【问题讨论】:

  • 嗨,我解决了这个问题,但现在我遇到了新问题,知道如何解决这个问题stackoverflow.com/questions/67385898/…
  • 这里要小心;首先,您不能插入具有空值的数据 - 甚至没有理由这样做。在 Firebase 中,节点不能为 nil,任何 IS nil 的节点都不能存在。第二件事,超级重要,这个"Phno":" " 不是一个空值。这是一个空间,也是一个值。

标签: ios json swift firebase firebase-realtime-database


【解决方案1】:

用下面的代码解决了

user.observe(.childAdded) { (DataSnapshot) in
   
   if let dict = DataSnapshot.value as? NSDictionary
   {
    for i in dict.allKeys
    {
        if let data = dict[i] as? NSDictionary
        {
            let message = data["Message"] as! String
            let phno = data["Phno"] as! String
            
            if(message != "" && phno != "")
            {
                print(message)
                print(phno)
            }
        
    }
   }
    
}

【讨论】:

  • 这个答案会导致很多悲伤。请通过安全地解包选项来保护您的代码。例如这个let message = data["Message"] as! String如果没有找到Message节点会导致你的应用崩溃,至少使用一个合并操作符给它一个默认值let message = data["Message"] as? String ?? "No Message"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-22
相关资源
最近更新 更多