Tengo un fragmento de código dentro de mi aplicación iOS construida con Swift, para recuperar todos los nodos de una base de datos en tiempo real de Firebase. Cuando ejecuto el código a continuación, noté que no devuelve todos los nodos secundarios.
Cuando consulto los nodos particulares que no se devuelven individualmente, al principio el código devuelve 'nil' y luego, en un segundo intento, recupera los nodos. (sin hacer ningún cambio de código en el proceso). Siguiendo este proceso, el nodo comienza a aparecer en los resultados con la función recuperar todos los nodos.
Ejemplo 1: Primero devuelve cero, luego, en un segundo intento, devuelve el nodo. Que puedo ver desde la consola y definitivamente existe en la base de datos.
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) }Lo siguiente se utiliza para recuperar todos los valores secundarios; al principio, esto no obtiene todos los nodos, sin embargo, después de ejecutar el código del Ejemplo 1 (dos veces), comienza a devolver el nodo en cuestión.
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) inTambién verifiqué mis límites de consultas y datos de Firebase y no estoy ni cerca del umbral de la cuenta gratuita. Cualquier ayuda es muy apreciada.
Prueba esto:
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)") } } } }) }