2017-07-16 1 views
0

J'ai des livres nœud et les utilisateurs noeud, les utilisateurs noeud a des livres préférés, maintenant je voulais obtenir les livres préférés et les afficher.Query node avec plusieurs clés firebase iOS/Queryequal avec tableau de clé dans IOS firebase

donc mon chercher est comme obtenir par l'utilisateur courant> obtenir des livres préférés => donne la liste maintenant comment obtenir cette liste de livres à partir du nœud de livres en utilisant firebase/firebasui

+0

En général, il est préférable pratique d'inclure votre structure de Firebase ainsi que le code que vous avez essayé jusqu'à présent sous forme de texte . Vous pouvez obtenir votre structure via la console Firebase-> Trois points à droite-> Exporter JSON. Dans votre question, vous mentionnez vouloir obtenir les livres préférés et les afficher. Quels livres préférés, TOUS? Le plus populaire? Un livre d'utilisateurs? Cela nous aide à répondre quand la question est claire. – Jay

Répondre

0

je pouvais corriger cette façon. Liez la vue de collection directement au tableau favori alors pour chaque instantané appeler le nœud de livre configurer alors la cellule

let ref = firebaseRef?.child("users").child(userUid!).child("FavBooks").queryOrderedByKey() 

self.datasrc = (savedCollectionView?.bind(to: ref!){ collectionView, IndexPath, snap in 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: IndexPath) 

    let bookRef = self.firebaseRef?.child("Books").child(snap.key).queryOrderedByKey() 
    bookRef?.observeSingleEvent(of: .value, with: {(snapshot) in 
    //configure cell 
    }) 
    return cell 
})! 
+0

Cela va poser problème car la cellule sera retournée avant que les données soient renvoyées depuis Firebase; la plupart du temps, la cellule sera vide. Le code est beaucoup plus rapide qu'Internet, de sorte que l'appel * return cell * s'exécutera avant que la fermeture de l'observation ait un changement pour remplir la cellule. – Jay

+0

vous avez raison, y a-t-il un autre moyen de résoudre ce problème? –

+0

ouais - ne fais pas ça. lol. Blague à part, vous devez remplir d'abord votre tableView ou collectionView dataSource - éventuellement dans la fonction viewDidLoad, puis une fois que la dataSource (généralement un tableau) est entièrement remplie dans la fermeture firebase, appelez tableView.reloadData() qui va ensuite extraire les données tableau local (dataSource). Si vous souhaitez conserver vos données en ligne, ajouter des observateurs à Firebase pour les événements .childAdded à leur tour, ajouter des données à la source de données à partir des données Firebase nouvellement ajoutées, puis tableView.reloadData() pour mettre à jour l'interface utilisateur – Jay