2016-07-03 9 views
1

Meine IOS App ruft ein JSON-Objekt ab, das ein Feld "Datei" enthält, das ein Bild ist. Dieses Feld wird von dem Server in Basis 64Swift 2 JSON Byte-Array zu UIIage

JSON Serialization: Optional({ 
file = "/9j/4AAQSkZJRgABAQAAAQABAAD/........ 

codiert wird, würde ich brauche dieses Feld in einem UIImageView zu laden. Ich habe mehrere Wege ohne Erfolg ausprobiert. Hier ist ein Auszug aus meinem Code:

 let task = session.dataTaskWithRequest(request, completionHandler: { (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in 
     if (error == nil) { 

      let json: AnyObject? 
      let imageArray: NSData? 
      do{ 
      try json = NSJSONSerialization.JSONObjectWithData(data!, options: []) 
       imageArray = json!["file"] as? NSData 
       print("JSON file: \(imageArray)") 

      } 
     catch 
     { 
      print("error Serialization") 
      return 
     } 

aber imageArray ist gleich Null ... eine Idee, wie ich dieses Feld abrufen kann (Base 64 Byte-Array) und es in einem UIImage konvertieren?

Antwort

3

JSON kann keine Binärdaten enthalten. Es kann nur Strings, Numbers, Booleans und Nullen enthalten. Sie müssen den base64-String selbst in NSData konvertieren.

Ersetzen Sie die Zeile imageArray = json!["file"] as? NSData durch die folgenden 5 Zeilen.

if let fileBase64 = json!["file"] as? String { 
    imageArray = NSData(base64EncodedString: fileBase64, options: []) 
} else { 
    print("missing `file` entry") 
} 
+0

ok, und wie kann ich konvertieren imageArray zu UIImage? Ich habe versucht, self.ordoPhoto.image = UIImage (Daten: imageArray!), Aber es funktioniert nicht. – tiamat

+0

Klären Sie, was Sie mit "es funktioniert nicht" meinen? Wird ein Build-Time-Fehler generiert? Bewirkt einen Absturz Ihrer App? oder immer 'nil' oder etwas anderes? – OOPer

+0

Entschuldigung für die Unklarheit .... meine UIImageView OrdoPhoto bleibt leer .... auch wenn ich meine imageArray kopieren mit Hilfe von self.ordoPhoto.image = UIImage (Daten: imageArray!) – tiamat