J'essaie d'extraire des données de deux tables Firebase différentes. Voici la structure de la table:Récupère des données depuis Firebase en joignant des tables dans iOS
Post {
1{
pImages{
i1:true
i2:true
}
}
2{
pImages{
i3:true
}
}
}
Images{
i1{
iUrl : ....
pId : 1
}
i2{
iUrl :...
pId : 1
}
i3{
iUrl:....
pId : 2
}
}
je dois récupérer des images correspondant à l'emploi avec id = 1. Ce qui suit est ma mise en œuvre pour récupérer des images:
func retrieveImagesForPost(postId: String,completion: (result: AnyObject?, error: NSError?)->()){
var imgArray:[Image]=[]
let postsRef = self.ref.child("post")
let imagesRef = self.ref.child("image")
let postImagesRef = postsRef.child(postId).child("pImages");
postImagesRef.observeEventType(FIRDataEventType.Value, withBlock: { (snapshot) in
for item in snapshot.children{
imagesRef.child(item.key).observeSingleEventOfType(.Value, withBlock: { (snap) in
let image = Image(snapshot: snap)
print(image)
imgArray.append(image)
})
}
print(snapshot.key)
print("called")
completion(result:imgArray, error:nil)
})
}
Mais, le problème est que je suis pas en mesure d'obtenir toutes les images dans imgArray
pour pouvoir envoyer à completion handler
. Voici la sortie de l'appel retrieveImagesForPost
avec l'ID de poste == 1.
pImages
called
<TestProject.Image: 0x7f9551e82000>
<TestProject.Image: 0x7f955466a150>
Les images sont récupérées après la completion handler
est appelée. J'ai essayé le dispatch groups
et l'approche semaphores
comme décrit dans le suivant post. Mais les résultats sont toujours les mêmes. Comment puis-je faire completion handler
pour attendre que toutes les images soient récupérées à partir de Firebase?
comment votre fonction changement je aurais besoin de se joindre 3 noeuds (relations) dans Firebase – Learn2Code
si (contre == snapshot.childrenCount) renvoie une erreur !? – Learn2Code