2016-10-14 3 views
0

Dies kann eine einfache Antwort sein, also Entschuldigung im Voraus, aber ich bin fest, weil ich immer noch Kopf eingepackt herum, wie Firebase funktioniert. Ich möchte eine Firebase-Datenbank basierend auf Unix-Daten abfragen, die dort gespeichert werden, und dann die zugehörigen "Unique ID" -Daten nehmen und sie in ein Array einfügen.Konvertieren Firebase Dictionary Daten zu Array (Swift)

Die Daten in Firebase sieht wie folgt aus:

posts 
    node_0 
    Unix Date: Int 
    Unique ID Event Number: Int 
    node_1 
    Unix Date: Int 
    Unique ID Event Number: Int 
    node_2 
    Unix Date: Int 
    Unique ID Event Number: Int 

Was ich bisher habe, ist wie folgt. Der Abfrageteil scheint wie erwartet zu funktionieren. Wo ich kämpfe, ist, wie man die "Unique ID Event Number" -Daten in ein Array legt. Dies ist der Ansatz, der dem Erfolg am nächsten schien, der auf dieser post basiert, aber ich bekomme einen Fehler, dass Kind kein Mitglied von "Wert" hat.

// Log user in 
     if let user = FIRAuth.auth()?.currentUser { 

      // values for vars sevenDaysAgo and oneDayAgo set here 

      ... 

      let uid = user.uid 

      //Query Database to get the places searched by the user between one and seven days ago. 
      let historyRef = self.ref.child("historyForFeedbackLoop/\(uid)") 
      historyRef.queryOrdered(byChild: "Unix Date").queryStarting(atValue: sevenDaysAgo).queryEnding(atValue: oneDayAgo).observeSingleEvent(of: .value, with: { snapshot in 

       if (snapshot.value is NSNull) { 
        print("error") 
       } 
       else { 

        for child in snapshot.children { 

         if let uniqueID = child.value["Unique ID Event Number"] as? Int { 

          arrayOfUserSearchHistoryIDs.append(uniqueID) 
         } 
        } 
       } 
      }) 
     } 
     else { 
      print("auth error") 
     } 

Alle Ideen werden sehr geschätzt!

Antwort

1

landete ich wieder arbeiten, wie ich die Firebase Daten lesen in this post skizzierte basiert auf dem Ansatz. Der tatsächliche Arbeitscode, den ich verwendet habe, folgt für den Fall, dass er für jemand anderen hilfreich ist.

// Log user in 
if let user = FIRAuth.auth()?.currentUser { 

    let uid = user.uid 
    // values for vars sevenDaysAgo and oneDayAgo set here 

    ... 

    let historyRef = self.ref.child("historyForFeedbackLoop/\(uid)") 
    historyRef.queryOrdered(byChild: "Unix Date").queryStarting(atValue: sevenDaysAgo).queryEnding(atValue: oneDayAgo).observeSingleEvent(of: .value, with: { snapshot in 

     if (snapshot.value is NSNull) { 
      print("user data not found") 
     } 
     else { 

      for child in snapshot.children { 

       let data = child as! FIRDataSnapshot 
       let value = data.value! as! [String:Any] 
       self.arrayOfUserSearchHistoryIDs.append(value["Unique ID Event Number"] as! Int) 
      } 
     } 
    }) 
} 
4

Versuchen Sie dies mit: -

historyRef.queryOrdered(byChild: "Unix Date").queryStarting(atValue: sevenDaysAgo).queryEnding(atValue: oneDayAgo).observeSingleEvent(of: .value, with: { snapshot in 

     if let snapDict = snapshot.value as? [String:AnyObject]{ 

       for each in snapDict{ 

         let unID = each.value["Unique ID Event Number"] as! Int 
         arrayOfUserSearchHistoryIDs.append(unID) 
        } 

       }else{ 
       print("SnapDict is null") 
      } 

     }) 
+0

Bingo, Bango, Bongo. Es ist der Schnappschuss. Wert nicht Kind, duh. Vielen Dank! – Ben

+0

Eigentlich habe ich zu früh gesprochen. Es funktioniert nicht, weil ich den Fehler "mehrdeutige Verwendung von tiefgestelltem" für die Zeile "let unID =" bekomme. Ich habe versucht, die Ideen von diesem Beitrag anzuwenden, aber war nicht erfolgreich. Irgendwelche Ideen? http://stackoverflow.com/questions/36238507/ambiguous-use-of-subscrip-error-after-new-swift-update – Ben

+0

Codieren Sie in Swift 2 oder Swift 3? Für swift 2 verwenden Sie jeweils.1 [Unique ID Event Number], auch kann ich vorschlagen, verwenden Sie nicht Leerzeichen in Ihrem DB-Namen, verursacht Fehler. Ändern Sie es in ** Unique_ID_Event_Number ** – Dravidian

Verwandte Themen