Firebase 快照返回 null

Posted

技术标签:

【中文标题】Firebase 快照返回 null【英文标题】:Firebase snapshot returns null 【发布时间】:2017-08-09 20:50:37 【问题描述】:

大家好,我一直在使用 firebase 从数据库中写入和读取值。在我编写了一个函数来检索通过以下方式使用 swift 存储的值或产品之前,它的工作非常棒。

这是我的代码

func retrieveLiveUrlFor(product: Product)
    if let path = product.prodRef
        print("Looking for : \(path)")
        var liveUrl = ""
        let ref = Database.database().reference(withPath: path)
        ref.observe(. value, with: 
            snapshot in
            print("Snap : \(snapshot.value)")
            if snapshot.exists()
                print("Snap : \(snapshot.value)")
                let dic = snapshot.value as? NSDictionary
                if dic != nil
                    let url = dic?["liveUrl"] as? String
                    print("Url is here")
                    if url != nil
                        print("URL is not nil")
                        liveUrl = url as! String
                    
                
            

            if (self.productdelegate != nil)
                print("Calling Product delegate")
                self.productdelegate?.liveUrlObtained!(liveUrl: liveUrl)
            
        )
    

这是我试图检索的路径的值

产品/直播/全球/WpMvDJZUclRlfHFJsSlBEbi0jHf1

这是 firebase 数据库的快照

snapshot.value 总是在 swift 中返回 null。 当我使用

打印时
print("Snap: \(snapshot.value)")

它打印以下内容

捕捉:可选() 请指导我做错了什么,以便我可以解决它。

【问题讨论】:

查看我的答案:***.com/a/45369544/7715250 我认为您的数据库结构不好检查 Firebase 文档firebase.google.com/docs/database/android/structure-data 避免嵌套数据结构,当您在查询时拥有并获得数千条记录时,它可能会产生问题 @AnasMehar 你能解释一下它有什么问题吗?如果有一些差异,那么你必须提供一个解决方案,而不是仅仅说它是错误的。请,我正在等待答案。 @AnasMehar 那么我应该在这里做什么?请根据我的情况提出建议? 【参考方案1】:

如果您正在使用 .value 事件进行观察,则将 snapshot.value 返回为 nil 表示该引用处不存在快照值。尝试将快照作为一个整体和 snapshot.key 打印出来

理想情况下,您需要的参考是

  let ref = Database.database.reference().child("Products").child("Live").child("Global").child("WpMvDJZUclRlfHFJsSlBEbi0jHf1")

观察者的功能如下:

ref.observe(.value) (snapshot) in
print(snapshot.value!)

【讨论】:

“表示该引用处不存在快照值”,稍后您强制解开快照 实际上我不能使用单独的孩子,因为我得到了一个特定产品的路径。 快照:快照 (WpMvDJZUclRlfHFJsSlBEbi0jHf1) 这是我调用 print(snapshot) 时打印的内容 @J.Doe 你是对的,我的错误不需要强制解包。但是,如果快照不包含任何值,则 print(snapshot.value!) 将打印

以上是关于Firebase 快照返回 null的主要内容,如果未能解决你的问题,请参考以下文章

当数据存在时,Swift firebase 快照返回 null

如何将来自 Firebase 的查询快照转换为不同的对象?

Firebase JavaScript 快照获取值

从 Firebase 数据快照获取 JSON 键值

Firebase 快照中的 Stream<List<Object>> 是不是会在节点的每次更改时返回整个节点?扑

Firebase Firestore 快照读取计数