Firebase Swift не получает все дочерние значения - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть фрагмент кода в моем встроенном приложении Swift для iOS, чтобы извлечь все узлы из базы данных Firebase Realtime.Когда я выполняю код ниже, я заметил, что он не возвращает все дочерние узлы.

Когда я запрашиваю конкретные узлы, которые не возвращаются по отдельности, сначала код возвращает 'nil', а затем со второй попытки извлекает узлы.(без каких-либо изменений кода в процессе).После этого процесса узел начинает отображаться в результатах с функцией извлечения всех узлов.

Пример 1: сначала возвращается ноль, а затем при второй попытке возвращает узел.То, что я вижу из консоли и определенно существует в базе данных.

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 и пределы данных, и я не приблизился к порогу для бесплатной учетной записи.Любая помощь очень ценится.

1 Ответ

0 голосов
/ 06 марта 2019

Попробуйте это:

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)")
                }
            }
        }
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...