2017-03-21 10 views
0

enter image description here Ich versuche, die Knotendaten auf Firebase zu aktualisieren, aber wenn ich ein Array sende, stürzt es ab. Und es gibt einen FehlerSenden von Daten an den Server in swift3 und firebase

Kann Objekt des Typs _SwiftValue bei 0 nicht speichern. Kann nur Objekte vom Typ NSNumber, NSString, NSDictionary und NSArray speichern.

Hier ist mein Code:

reference_user.child(user_uid).updateChildValues(["name": username, "phone": phoneNo, "url": imgUrl, "emergency": emerLocalArr], withCompletionBlock: {(error, ref) in 

       if (error != nil) { 
        KRProgressHUD.showError(progressHUDStyle: nil, maskType: nil, font: nil, message: "Couldn't Update the node") 
       } else { 
       print("success") 

       } 
      }) 

emerLocalArr ist NSMutableArray. Hier ist mein struct

struct Emergency{ 
var emer_id: NSNumber 
var emer_name: String 
var emer_phoneNo: String 

init(emergency: NSDictionary) { 

    if emergency.object(forKey: "id") != nil { 
     emer_id = emergency.object(forKey: "id") as! NSNumber 
    } 
    else{ 
     emer_id = 0 
    } 

    if emergency.object(forKey: "name") != nil { 
     emer_name = emergency.object(forKey: "name") as! String 
    } 
    else{ 
     emer_name = "" 
    } 

    if emergency.object(forKey: "phoneNo") != nil{ 
     emer_phoneNo = emergency.object(forKey: "phoneNo") as! String 
    } 
    else{ 
     emer_phoneNo = "" 
    } 
} 

func convertToDictionary() -> [String : Any] { 
    let dic: [String: Any] = ["id":self.emer_id, "name":self.emer_name, "phoneNo":self.emer_phoneNo] 
    return dic 
} 
} 
+0

Welcher Art sind Ihre Werte? Der Fehler deuten darauf hin, dass sie mit Firebase nicht kompatibel sind – Starlord

+0

der Wert in emerLocalArr ist der Modellklasse struct Notfall { var emer_id: NSNumber var emer_name: String var emer_phoneNo: String init (Notfall: NSDictionary) { } –

Antwort

0

Ihr Array enthält benutzerdefiniertes Objekt vom Typ Emergency, so müssen Sie zunächst Array von Wörterbuch machen bilden. Fügen Sie also in Ihrer Struktur eine Instanzmethode hinzu, die das Dictionary-Objekt zurückgibt, und erstellen Sie dann das Array der Dictionary-Form zu Ihrem Array von benutzerdefinierten Objekten. Überprüfen Sie diese SO answer, um Array von struct Objekt zu Array von Dictionary zu konvertieren.

Danach setzen Sie das Array zu Ihrem Firebase.

let array = emerLocalArr.map { $0.convertToDictionary() } 

reference_user.child(user_uid).updateChildValues(["name": username, "phone": phoneNo, "url": imgUrl, "emergency": array], withCompletionBlock: {(error, ref) in 
+0

Ja in Firebase ..... immer noch den gleichen Fehler. –

+0

Es gibt Fehler in dieser Zeile Lassen Sie Array = emerLocalArr.map {$ 0.convertToDictionary()} Wert des Typs 'NSFastEnumerationIterator.Element' (aka 'Any') hat kein Mitglied 'ConvertToDictionary'. Ich habe bereits die Methode convertToDictionary in der struct-Klasse hinzugefügt. –

+0

@RahulGupta Sie müssen die Methode 'convertToDictionary' in Ihrer Struktur hinzufügen, überprüfen Sie, dass die Antwort, die ich verknüpft habe und in dieser Funktion Wörterbuch aus Ihrer Struktur Eigenschaften. –

Verwandte Themen