2017-09-06 2 views
1

Je souhaite pouvoir lister les utilisateurs dans une tableview en récupérant leur valeur UID à partir d'une clé stockée dans ma base de données. À partir de maintenant, le code récupère uniquement la première valeur dans la base de données plutôt que toutes les valeurs. Voici le code pour aller chercher les candidats.Firebase Swift 3 Récupération de plusieurs valeurs à partir d'un groupe

func loadApplicants() { 
    let usersRef = ref.child("users") 
    usersRef.observe(.value, with: { (users) in 

     var resultArray = [UserClass]() 

     for user in users.children { 
      let user = UserClass(snapshot: user as! DataSnapshot) 

      if user.uid == self.job.userID { 
       let appRef = self.ref.child("jobs").child(self.job.postID).child("applicants") 
       appRef.queryOrderedByKey().observeSingleEvent(of: .childAdded, with: { (snapshot) in 
        let sValue = snapshot.value 
        resultArray.append(user) 
       }) 
      } 
     } 
    }) { (error) in 
     print(error.localizedDescription) 
    } 
} 

Voici à quoi ressemble ma base de données où sont stockés les UID de l'utilisateur.

jobs 
"Job ID" 
    applicants: 
    -KtLJaQnFMnyI-MDWpys:"8R6ZAojX0FNO7aSd2mm5aQXQFpk1" 
    -KtLLBFU_aVS_xfSpw1k:"GGqjtYvwSwQw9hQCVpF4lHN0kMI3" 

Si je devais exécuter l'application, il récupère UID: « 8R6ZAojX0FNO7aSd2mm5aQXQFpk1 » Comment puis-je mettre en œuvre une boucle ou une instruction if pour veiller à ce que toutes les valeurs sont et ajoutees dans la vue de la table

Je sais que j'ai besoin d'une boucle for avant que fetchApplicants soit appelé depuis AuthService car il ne récupère qu'un seul UID mais je ne peux pas déterminer où il irait.

Merci.

P.S. Voilà ce que j'ai essayé

func loadApplicants() { 
    let jobID = job.postID 
    let appRef = ref.child("jobs").child(jobID!).child("applicants") 
    appRef.queryOrderedByKey().observeSingleEvent(of: .childAdded, with: { (snapshot) in 
     if let applicants = snapshot.value! as? [String:AnyObject] { 
      for (value) in applicants { 
       self.authService.fetchApplicants(applicantID: "\(value!)", completion: { (users) in 
        self.usersArray = users 
        self.tableView.reloadData() 
       }) 
      } 
     } 
    }) 
} 

mais la sortie est:

(key: "-KtLLBFU_aVS_xfSpw1k", value: GGqjtYvwSwQw9hQCVpF4lHN0kMI3) 
(key: "-KtLJaQnFMnyI-MDWpys", value: 8R6ZAojX0FNO7aSd2mm5aQXQFpk1) 

Répondre

0

nécessaires à l'utilisation d'observer au lieu de observeSingleEvent

Réponse:

appRef.queryOrderedByKey().observe(.childAdded, with: { (snapshot) in