2016-05-14 12 views
0
"-KHbCuQflKHrJiUmfpG0" : { 
    "waypoints" : { 
     "-KHbCuQflKHrJiUmfpG1" : { 
     "latitude" : 13.17078652595298, 
     "longitude" : -59.5775944578738 
     }, 
     "-KHbCuQflKHrJiUmfpG2" : { 
     "latitude" : 13.15541190861343, 
     "longitude" : -59.57619643155932 
     }, 
     "-KHbCuQg9W_tebl1pU66" : { 
     "latitude" : 13.148444967591, 
     "longitude" : -59.5589266947333 
     } 
    }, 
    "subtitle" : "jamesrick", 
    "title" : "Highway", 
    "type" : "polyline" 
}, 

Ich habe diese Struktur für Linien in Firebase. Wie kann man alle Daten mit verschachtelten Knoten-Wegpunkten abrufen?Gibt es eine andere Lösung, wie Wegpunkte abgerufen werden können?

Jetzt habe ich Zugriff auf Titel, Untertitel, Typ aber wie Zugriff auf Wegpunkte erhalten? Wenn ich verwende

`polylineDictionary["waypoints"] as? [String: [String:Double]]` 

so diese Wörterbücher sind nicht bestellt. Danke für ein paar Tipps.

+0

Wenn Sie mit .Value beobachten, sagen Sie im Wesentlichen 'Firebase, geben Sie mir alles im ref-Knoten; alle Kinder, Kinder Kinder usw., und mir ist es egal, in welcher Reihenfolge sie sind und auch weiterhin nach irgendwelchen Änderungen Ausschau halten (hinzufügen, ändern, entfernen) und wenn das überhaupt geschieht, gib mir alle Daten wieder. Ist es das was du willst? Oder möchten Sie bestimmte Knoten und/oder eine bestimmte Reihenfolge? Sobald Sie feststellen, was Sie eigentlich wollen und wie Sie es bestellt haben, ist die Erstellung des Codes einfacher. – Jay

+0

@Jay: Die Kinder des Schnappschusses werden auch sortiert, wenn Sie '.Value' * erhalten, solange Sie mit der [' children' Eigenschaft] darüber iterieren (https://www.firebase.com/docs/ios-) api/Klassen/FDataSnapshot.html # // api/name/children) *. Sobald Sie das Objekt in ein Dictionary konvertiert haben, gehen alle Bestellgarantien verloren, da Dictionaries inhärent ungeordnet sind. Aber die Lösung ist in der Tat typisch wie Sie sagen: Hören Sie auf der richtigen Ebene, so dass Sie Firebase sagen können, wie Sie die Kinder bestellen. –

+0

@FrankvanPuffelen Ja! Großer Fang. Wenn Sie den Inhalt des Snapshots aufnehmen und in ein Wörterbuch einfügen, kann dies die Reihenfolge zufällig bestimmen. Es ist nicht klar aus der Frage, ob die Reihenfolge wichtig ist. Ich denke, das OP fragt, wie man aus dem Snapshot auf die einzelnen Wegpunkte zugreifen kann. Ist die Reihenfolge wichtig? – Jay

Antwort

0

Dies ist, wie ich die verschachtelten Wegpunkte bekommen würde ... es ist im Grunde durch die Schlüssel durchlaufen ... Ich würde auch einige Fehlerprüfung hinzufügen, wenn die Längen- und Breitengrade greifen, um sicherzustellen, dass sie da sind, aber das ist das Wesentliche:

if let polylineDictionary["waypoints"] as? [String: [String:Double]] { 
      let waypoints = Array(polylineDictionary.keys) 


      for i in 0..<waypoints.count { 
       let waypointId = waypoints[i] 
       let latitude = polylineDictionary[waypointId]["latitude"] 
       let longitutde = polylineDictionary[waypointId]["longitude"] 
      } 

    } 
+0

Danke an alle! – sparky

+0

Was ist die akzeptierte Lösung? :) – Jaime

0

Es ist nicht klar von der Frage über das Ordnen; wenn Sie nur an die Wegpunkte erhalten möchten, ist es ziemlich einfach:

Angenommen, Ihre vollständige Firebase Struktur ist:

root_node 
    "-KHbCuQflKHrJiUmfpG0" : { 
    "waypoints" : { 
     "-KHbCuQflKHrJiUmfpG1" : { 
     "latitude" : 13.17078652595298, 
     "longitude" : -59.5775944578738 
     }, 
     "-KHbCuQflKHrJiUmfpG2" : { 
     "latitude" : 13.15541190861343, 
     "longitude" : -59.57619643155932 
     }, 
     "-KHbCuQg9W_tebl1pU66" : { 
     "latitude" : 13.148444967591, 
     "longitude" : -59.5589266947333 
     } 
    }, 
    "subtitle" : "jamesrick", 
    "title" : "Highway", 
    "type" : "polyline" 
    } 

nehme ich die Daten für diesen speziellen Knoten gesichert werden sollen, -KHbCuQflKHrJiUmfpG0

let nodeRef = rootRef.childByAppendingPath("-KHbCuQflKHrJiUmfpG0") 

nodeRef.observeSingleEventOfType(.Value , withBlock: { snapshot in 

    print(snapshot.value) //prints everything in the node 

    let title = snapshot.value["title"] as! String //to get any element 
    print(title) //prints Highway 

    var waypoints = [String: [String:String]]() //dict to hold key:value, unordered 

    waypoints = snapshot.value["waypoints"] as! Dictionary 
    print(waypoints) //prints the 3 waypoints and their children (as a dict) 

    //get fancy and convert the dictionary to an array (which can be sorted) 
    let arr = waypoints.map {"\($0) \($1)"} 

    for point in arr { 
     print(point) 
    } 
} 
Verwandte Themen