【问题标题】:Print All Children Columns from Firebase - iOS Swift 4从 Firebase 打印所有子列 - iOS Swift 4
【发布时间】:2019-05-09 11:22:16
【问题描述】:

我的用户表中有 2 条记录

下面这段代码

let fcmTokenRef = Database.database().reference().root.child("users").child(id!).child("fcmToken")
fcmTokenRef.observe(DataEventType.value, with: { (snapshot) in
    print(">>",snapshot)
})

将打印出孩子的令牌

如何调整我的代码以打印所有孩子的所有令牌?

【问题讨论】:

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


    【解决方案1】:

    您正在请求一次读取,因此您正在读取一次数据。你需要使用.childAdded

    试试这个:

    let fcmTokenRef = Database.database().reference().child(“users”)
        fcmTokenRef.observe(.childAdded, with: { (snapshot) in
        print(">>",snapshot)
         guard let data = snapshot as? NSDictionary else {return}
         var each_token = data[“fcmToken”] as? String
         print(“all tokens: \(each_token!)”)
    })
    

    @puf 说了一些非常重要的话: differences between child added and value firebase

    child_added 事件会针对您查询的节点下的每个匹配子节点触发。如果没有匹配的孩子,它不会触发。

    【讨论】:

    • @kyo 不需要,childAdded 循环遍历集合中的每个孩子。所以没什么好担心的
    • 如果不是,为什么将其作为您答案的一部分?我可以删除它吗?
    • 您建议的代码似乎格式错误。看到这个错误:i.imgur.com/EKfediu.png
    • 已更新,还使用 ​​xcode 建议的更新卷曲。谢谢
    • 我试过你的代码,它似乎编译得很好,但是当在 iPhone 上运行时,它崩溃并显示这个错误:i.imgur.com/vhwEWpz.png
    【解决方案2】:

    你可以试试

    let fcmTokenRef = Database.database().reference().root.child("users").observe(DataEventType.value, with: { (snapshot) in 
          print(">>",snapshot)
    
          let dic = snapshot.value as! [String:[String:Any]]
          Array(dic.values).forEach { 
            let str = $0["fcmToken"] as! String
            print(str)
         }
    })
    

    【讨论】:

    • 对于 1 观察将 observe 替换为 observeSingleEvent
    • 您的代码编译正常,但在手机上运行时卡在此处。 :i.imgur.com/LxtzS7C.png
    • 您能详细说明一下吗?我错过了您的代码的任何部分吗?
    • 你更新的代码编译完美,在手机上完美运行。我现在在我的控制台上得到了这些?。 i.imgur.com/4PqScly.png
    • $0 是什么意思?
    猜你喜欢
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多