繁体   English   中英

观察者未调用 swift iOS firebase 实时数据库

[英]Observer not calling in swift iOS firebase realtime database

我正在构建一个使用 firebase 实时数据库的应用程序。 这是我的数据库内容。

数据库内容

在这里,每当将新的子节点添加到请求节点时,我需要获取 Phno 和 Message 值并将其打印在控制台中。 这是我的观察者代码

user.observe(.childAdded) { (DataSnapshot) in
       print("Inside")
       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)
                }
            
        }
       }
        
    }

我将上面的代码放在 function 中,并第一次在 viewdidload() 中调用它。 之后我尝试手动将子节点添加到请求节点,但观察者没有触发。我使用“内部”打印语句进行调试,我在日志 output 中发现了一些奇怪的东西

日志输出

正如您所看到的,在视图加载期间调用了一次内部,但它再次被调用,甚至没有对数据进行任何更改。 如何解决此问题,以便在将新子节点添加到请求节点时调用触发器

我认为问题是询问如何获取请求父节点中包含的子节点数据。 如果是这样,试试这个:

首先,我们想在某个地方存储这些数据,所以我创建了一个 class 来保存每个请求,然后创建一个数组来保存所有请求

class RequestClass {
    var key = ""
    var msg = ""
    var phone = ""

    convenience init(withSnapshot: DataSnapshot) {
        self.init()
        self.key = withSnapshot.key
        self.msg = withSnapshot.childSnapshot(forPath: "Message").value as? String ?? "no msg"
        self.phone = withSnapshot.childSnapshot(forPath: "Phno").value as? String ?? "no phone"
    }
}

var requestArray = [RequestClass]()

然后我们向 Request 节点添加一个观察者。 A.childAdded 观察者最初将遍历每个孩子,然后呈现任何新添加的孩子,然后将其添加到数组中。 self.ref是一个 class var,它指向我的 firebase 根。

func readRequests() {
    let requestRef = self.ref.child("bill").child("Request")
    requestRef.observe(.childAdded, with: { snapshot in
        let request = RequestClass(withSnapshot: snapshot)
        self.requestArray.append(request)
    })
}

以上将读取问题中的节点并将每个请求存储在数组中。 之后,为了测试,我们可以打印出来

self.requestArray.forEach { print($0.key, $0.msg, $0.phone)}

output 是

EEC8A no message no phone
REQ2 Hello 2353476346346
REQ3 K 12312

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM