我在
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
我还检查了我的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)") } } } }) }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。