2016-06-27 1 views
2

Je suis actuellement aux prises avec l'accès à d'autres données stockées dans un chemin, plus spécifique les données d'un sous-dossier. Ma configuration ressemble à ceci:Firebase/Swift: données autoID d'accès childSnapshotForPath?

userID{ 
    username:Andreas, 
    gender:Male, 
    age:18, 
    footballTeams{ 
     Team1{ 
      name:My team 1 
      matchesPlayed:3 
     } 
    } 
} 

Je suis actuellement ce code pour saisir à la fois le nom d'utilisateur, le sexe et l'âge:

ref.child("Users").observeEventType(.ChildAdded, withBlock: { (snapshot1:FIRDataSnapshot) in     
     //code goes here.. 
     var username = String(snapshot1.value!["username"] as! String) 
     var gender = String(snapshot1.value!["gender"] as! String) 
     var age = Int(snapshot1.value!["age"] as! Int)     
}) 

Cependant, je veux saisir tous les noms d'équipe stockés dans les footballTeams chemin, ordonné comme 'Team1, Team2, Team3' etc Donc, je suis tombé sur "snapshot1.childSnapshotForPath("footballTeams/Team1").value!["name"]". Cependant, cela aurait fonctionné, tant que je connaissais le nom exact de chaque nom de chemin d'équipe, mais cela est stocké en tant qu'identification automatique. Des idées sur comment j'aborderais cela?

Merci d'avance.

Répondre

2

Vous étiez sur la bonne voie lorsque vous avez choisi de travailler avec childSnapshotForPath. Vous devez juste obtenir l'instantané de la branche /footballTeams et le parcourir pour obtenir chaque enfant.

ref.child("Users").observeEventType(.ChildAdded, withBlock: { (snapshot1:FIRDataSnapshot) in     
     var username = String(snapshot1.value!["username"] as! String) 
     var gender = String(snapshot1.value!["gender"] as! String) 
     var age = Int(snapshot1.value!["age"] as! Int) 
     if let footballTeamsSnapshot = snapshot1.childSnapshotForPath("footballTeams") as? FIRDataSnapshot { 
     for child in footballTeamsSnapshot.children.allObjects as [FDataSnapshot] { 
      print(child.value) 
     } 
     }   
}) 
+0

C'est aussi semblable à une autre solution que j'ai essayé, mais aussi avec mon code et votre code, j'ai obtenu cette erreur: « Initializer pour la liaison conditionnelle doit avoir un type en option, pas« FIRDataSnapshot ». – askaale

+0

srry. encore apprendre quelques rapides ici et là. Faites-moi savoir si ma modification fonctionne. si elle ne se contente pas de se débarrasser de cette vérification et d'utiliser 'pour enfant dans snapshot1.childSnapshotForPath (" footballTeams "). children.allObjects comme [FDataSnapshot] { print (child.value) }' – adolfosrs

+0

Merci! Ça marche! – askaale