Fehler beim Abrufen von Daten aus Firebase.Firebase Swift 3-Fehler beim Typcasting
Hier ist mein Code:
// MARK:- Pull in data from Firebase on the main thread. READ ONLY ONCE.
self.ref.child("Power_Stations").child("Stations").observeSingleEvent(of: .value, with: { snapshot in
if snapshot.exists() {
for item in snapshot.children {
let x = item as! FIRDataSnapshot
let name = x.value(forKey: "Power_Station_Name") as Any
print(name)
}
}
})
Problem: Beenden app aufgrund nicht abgefangene Ausnahme 'NSUnknownKeyException' Grund: ‚[valueForUndefinedKey:]: Diese Klasse ist nicht Schlüsselwert Kodierungskonform für den Schlüssel Power_Station_Name. ' < - Dies geschieht bei
let name = x.value(forKey:"Power_Station_name") as Any
Der obige Fehler wird mir zu sagen, dass ich einen Crash bin immer, wenn es eine Variable mit einem bestimmten Wert zu füllen versucht?
Allerdings, wenn ich die Daten drucken das ist, was ich in den Protokollen bin Empfang:
Snap (-KXRfS0afUet-U8r996p) {
"Power_Station_Address" = nil;
"Power_Station_City" = nil;
"Power_Station_ID" = VsNggVo;
"Power_Station_Inventory" = {
android = 12;
"android_description" = "Fully Stocked";
ios = 6;
"ios_description" = "Fully Stocked";
};
"Power_Station_Lat" = "33.6000422";
"Power_Station_Long" = "23.228643";
"Power_Station_Name" = "Power Pods Station";
"Power_Station_Owner" = "Power Pods Inc.";
"Power_Station_Rating" = {
"Average_Ranking" = "4.5";
"Number_Of_Ratings" = 105;
};
"Power_Station_State" = nil;
"Power_Station_Update_Date" = "2016-11-25 18:09:46 +0000";
"Power_Station_Upload_Date" = "2016-11-25 18:09:46 +0000";
}
Unten ist, wie ich Daten in die Datenbank speichere.
let newObject = [
"Power_Station_ID" : id,
"Power_Station_Name" : "Power Pods Station" as String,
"Power_Station_Address" : "\(placeMark.thoroughfare)" as String,
"Power_Station_City" : "\(placeMark.locality)" as String,
"Power_Station_State" : "\(placeMark.administrativeArea)" as String,
"Power_Station_Long" : (placeMark.location?.coordinate.longitude)! as Double,
"Power_Station_Lat" : (placeMark.location?.coordinate.latitude)! as Double,
"Power_Station_Owner" : "Power Pods Inc." as String,
"Power_Station_Inventory" : [
"ios" : 6,
"ios_description" : "Fully Stocked" as String,
"android" : 12,
"android_description" : "Fully Stocked" as String
] as [String : Any],
"Power_Station_Rating" : [
"Number_Of_Ratings" : 105,
"Average_Ranking" : 4.5,
] as [String : Any],
"Power_Station_Upload_Date" : String(describing: NSDate()),
"Power_Station_Update_Date" : String(describing: NSDate())
] as [String : Any]
self.ref.child("Power_Stations").child("Stations").childByAutoId().setValue(newObject)
Kann mir jemand helfen herauszufinden, was ich falsch mache?
Interessant interessant .... das funktioniert. –
danke @Jay ... Ich habe auch den folgenden Code verwendet. x.childSnapshot (fürPfad: "Power_Station_Address"). Wert und es hat auch funktioniert. Wissen Sie warum oder ob dies die offizielle Änderung für das Abrufen der Daten aus Firebase ist? Ich habe Firebase vorher benutzt, aber nie Daten davon wie oben gezogen. –
Denken Sie daran, dass beim Lesen von Firebase .values Strings, Zahlen, ein anderes Wörterbuch oder das gefürchtete Array sein können (bitte verwenden Sie keine Arrays), damit nur Sie wissen, was Sie erwarten, also müssen Sie definieren, was es im Code sein soll. Wenn die Antwort funktioniert, vergiss nicht, sie zu akzeptieren! – Jay