2016-05-30 24 views
1

derzeit als solcheMomentaufnahme in Firebase. wie tiefer in die Snapshot

{ 
    'listone': 
     { 
     'entrydate1': 
      { 
      'random key 1': 
       { 
       'name': 'Chris'; 
       'date': '24 May 2016' 
       } 
      'random key 2': 
       { 
       'name': 'John'; 
       'date': '25 May 2016' 
       } 
      } 
     'entrydate2': 
      { 
      'random key 1': 
       { 
       'name': 'Chris'; 
       'date': '24 May 2016' 
       } 
      'random key 2': 
       { 
       'name': 'John'; 
       'date': '25 May 2016' 
       } 
      } 
     } 
} 

Der Zufallsschlüssel von Feuerbasis childByAutoID()

meine Daten zu graben erzeugt wird, die Frage ist, wenn ich meinen Schnappschuss zu bekommen, wie bekomme ich die Details jeder zufällige Schlüssel? Grundsätzlich muss ich die Daten von listone abrufen und ich werde meine tableview durch Sortieren der frühesten entrydate bevölkern. Aber nachdem ich den Schnappschuss bekommen habe, bin ich verloren, wie ich die Informationen aus dem Schnappschuss bekommen kann.

 override func viewDidLoad() { 
    super.viewDidLoad() 
    ref = FIRDatabase.database().reference() 
    let uid = FIRAuth.auth()!.currentUser!.uid 

    let listOneRef = ref.child(uid + "/listone") 

    _ = listOneRef.observeEventType(.Value, withBlock: { (snapshot) in 


     for item in snapshot.children { 
      let child = item.children.allObjects 

      for snap in child { 
       //anyitems was initialized as [AnyObject] array 
       self.anyitems.append(snap) 

      } 
     } 
    self.tableView.reloadData() 
    }) 

Ich habe keine Ahnung, wie man die Details tatsächlich nutzt. wenn ich anyitems drucke ich sehe einige Details dh

[Snap (-KJ-jqTNf3MTtY8YRH-3) { 
Name = "Chris"; 
Date = "30 May 2016"; 
}, Snap (-KJ01QYoTedZkClsf13Y) { 
Name = "John"; 
Date = "30 May 2016"; 
}] 

Antwort

2

Ich bin auf Xcode jetzt nicht, so kann ich nicht überprüfen, aber es sollte so etwas sein:

for snapshot in anyitems { 
    print(snapshot.value.objectForKey("Name")) 
} 

Und ich denke, Indizierung Arbeit sollte auch:

for snapshot in anyitems { 
    print(snapshot.value["Name"]) 
} 

Wenn Sie den Typ an den Compiler sagen müssen:

for snapshot in anyitems as! [FIRDataSnapshot] { 
    print(snapshot.value.objectForKey("Name")) 
} 

Aber es wäre besser, als Sie, bemerkt haben sicher das Array zu werfen, bevor sein Inhalt zuzugreifen:

if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot] { 

} 
+0

Vielen Dank für Ihre Antwort. Anyitems ist jedoch AnyObject. also würde es nicht "snapshot.value" geben – Chris

+0

Deshalb habe ich das dritte Beispiel gemacht. :) – Moritz

+0

oh richtig! Ich habe es versucht und es hat nicht funktioniert, aber ich habe es als FIRDataSnapshot erklärt, als ich ... = ... und es hat funktioniert. im Grunde von Anfang an würde ich als solche erklären, wenn Snapshots = snapshot.children.allObjects als? [FIRDataSnapshot] 'und setze meine Schleife fort und ich werde die richtigen Ausgaben bekommen, danke! – Chris