swift - Firebase swift 不检索所有子值

标签 swift firebase firebase-realtime-database

我在 Swift 构建的 iOS 应用程序中有一段代码,用于从 Firebase 实时数据库中检索所有节点。当我执行下面的代码时,我注意到它并没有返回所有的子节点。

当我查询未单独返回的特定节点时,代码首先返回“nil”,然后第二次尝试检索这些节点。 (无需在此过程中进行任何代码更改)。在这个过程之后,节点开始显示在结果中,并带有检索所有节点功能。

示例 1:首先返回 nil,然后在第二次尝试时返回节点。我可以从控制台看到,并且肯定存在于数据库中。

ref?.child("transactions").child(email).child("14526452327").observeSingleEvent(of: .value, with: { (snapshot) in
                // Get user value
                let value = snapshot.value as? NSDictionary
                        print(value)
                        print("!!****************!!")
                // ...
            }) { (error) in
                print(error.localizedDescription)
            }

以下内容用于检索所有子值;一开始这并没有获取所有节点,但是在运行示例 1 中的代码(两次)后,它开始返回有问题的节点。

ref?.child("transactions").child(email).observeSingleEvent(of: .value, with: { (snapshot) in

        let childrenCount = snapshot.childrenCount
        var counter : Int = 0

        for trans in snapshot.children.allObjects as! [DataSnapshot]
        {
            counter = counter + 1

            self.ref?.child("transactions").child(email).child(trans.key).observeSingleEvent(of: .value, with: { (snapshot2) in

Here is a screenshot of the Firebase DB structure;

我还检查了我的 Firebase 查询和数据限制,我离免费帐户的阈值还差得很远。任何帮助是极大的赞赏。

最佳答案

试试这个:

func getData() {
    // Making a reference
    let transactionRef = Database.database().reference(withPath: "transactions")
    transactionRef.observeSingleEvent(of: .value, with: { (snapshot) in

        // Printing the child count
        print("There are \(snapshot.childrenCount) children found")    

        // Checking if the reference has some values
        if snapshot.childrenCount > 0 {

            // Go through every child
            for data in snapshot.children.allObjects as! [DataSnapshot] {
                if let data = data.value as? [String: Any] {

                    // Retrieve the data per child


                    // Example
                    let name = data["name"] as? String
                    let age = data["age"] as? Int

                    // Print the values for each child or do whatever you want
                    print("Name: \(name)\nAge: \(age)")
                }
            }
        }
    })
}

关于swift - Firebase swift 不检索所有子值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54853267/

相关文章:

swift - 为什么两个不同的串行队列会在 swift 中造成死锁?

ios - 使用 Alamofire 下载后等待 segue 时处理用户交互

macos - Swift if 语句不返回值

java - 我们如何在 Firebase 中添加服务器端 Java 代码?

android - Firebase 返回多个 ID,哪个是唯一的?

android - FirebaseListAdapter 空 View

swift - Xcode 9 中指示器没有停止。有解决办法吗?

java - 在 Firebase 数据库中存储变量的必要性

Firebase - 按自定义功能排序(距离)

javascript - 如何使用另一个用户插入的电子邮件发送通知,该用户使用 Cloud Functions for Firebase 请求通知?