J'ai trois nœuds dans Firebase que je voudrais boucler en utilisant la même boucle. Je suis capable de réussir une boucle à travers un seul nœud (cookies) en utilisant ce code:Comment faire pour boucler tous les enfants Firebase en même temps dans la même boucle?
databaseRef.child("cookies").observeSingleEvent(of: .value, with: {(snapshot) in
for item in snapshot.children.allObjects as! [DataSnapshot] {
let thisItem = item.value as! NSDictionary
if(favoriteArray.contains(item.key)) {
self.numberOfRecipes.append(thisItem["recipeHeaderFirebase"] as! String)
let tempRecipe = Recipe()
tempRecipe.fbKey = item.key
tempRecipe.recipeHeaderObject = (thisItem["recipeHeaderFirebase"] as! String)
tempRecipe.recipeTextObject = (thisItem["recipeIngredientsTextFirebase"] as! String)
tempRecipe.recipeImageObject = (thisItem["recipeImageFirebase"] as! String)
self.recipeClassArray.append(tempRecipe)
}
}
})
Je voudrais maintenant boucler les deux nœuds restants ainsi. Des idées?
J'ai essayé d'ajouter des noeuds supplémentaires, mais une impression dans la console indique qu'elle n'a été ajoutée qu'à partir du dernier noeud. Voir le code ci-dessous:
self.databaseRef.child("cookies").observeSingleEvent(of: .value, with: {(snapshot) in
self.databaseRef.child("dessert").observeSingleEvent(of: .value, with: {(snapshot) in self.databaseRef.child("breakfast").observeSingleEvent(of: .value, with: {(snapshot) in
for item in snapshot.children.allObjects as! [DataSnapshot] {
let thisItem = item.value as! NSDictionary
if(favoriteArray.contains(item.key)) {
self.numberOfRecipes.append(thisItem["recipeHeaderFirebase"] as! String)
let tempRecipe = Recipe()
tempRecipe.fbKey = item.key
tempRecipe.recipeHeaderObject = (thisItem["recipeHeaderFirebase"] as! String)
tempRecipe.recipeTextObject = (thisItem["recipeIngredientsTextFirebase"] as! String)
tempRecipe.recipeImageObject = (thisItem["recipeImageFirebase"] as! String)
self.recipeClassArray.append(tempRecipe)
}
}
print(self.numberOfRecipes.count)
print(self.recipeClassArray)
let url = URL(string: self.recipeClassArray[self.currentView].recipeImageObject)
self.recipeImageUI.kf.setImage(with: url) //SÄTTER IN BILD MED KINGFISHER
self.recipeHeader.text = self.recipeClassArray[self.currentView].recipeHeaderObject //SÄTTER IN HEADER
self.ingredientText.text = self.recipeClassArray[self.currentView].recipeTextObject //SÄTTER IN TEXTEN
self.animateFunc(image: self.recipeImageUI, labelHeader: self.recipeHeader, labelText: self.ingredientText) //FUNKTION FÖR ATT ANIMERA
})
})
})
Vous pouvez intégrer le fait observer dans l'autre. Par exemple, quelque chose comme ça: databaseRef.child ("cookies"). ObserveSingleEvent (de: .value, avec: {(snapshot) dans databaseRef.child ("secondNode"). ObserveSingleEvent (de: .value, avec: {(instantané) dans ... et ainsi de suite.Ce n'est techniquement pas une boucle, mais l'accès aux données se passe l'un après l'autre –
Merci, mais j'ai fait une impression dans la console et il semble seulement ajouter du dernier noeud, en ignorant les deux premiers listé ... Mise à jour de mon post ci-dessus :) Pouvez-vous voir ce qui manque? –
Oui, parce que l'impression n'a appelé qu'au niveau le plus profond ... alors essayez quelque chose comme ça: self.databaseRef.child ("cookies"). observerSingleEvent (de: .value, avec: {(cookiesSnapshot) dans \t \t print ("les cookies: \ (cookiesSnapshot)") \t \t self.databaseRef.child ("dessert") observeSingleEvent (de:. .value, avec: { (dessertSn apshot) dans \t \t \t print ("dessert: \ (dessertSnapshot)") \t \t \t self.databaseRef.child (. "du petit déjeuner") observeSingleEvent (de: .value, avec: {(breakfastSnapshot) dans \t \t \t imprimer ("petit-déjeuner: \ (breakfastSnapshot)") –