2016-02-21 3 views
1

Я пытаюсь получить изображение, представленное в качестве буфера по этому адресу: http://apiapp-env2.elasticbeanstalk.com/?nomfile=FX1wTPcaZQ1456021964555.pngПолучить NSData из буфера в Swift

Как вы можете видеть в ответ, изображение представляет собой буфер хранится в объекте данных внутри JSON (Я не являюсь владельцем API, поэтому я не могу его изменить)

Ну, я пытаюсь преобразовать изображение из буфера в UIImage. Это то, что одна из вещей, которые I'have пытался до сих пор:

Alamofire.request(.GET, URL, parameters: nil, encoding: .JSON) 
    .validate() 
    .response{ 
    request, response, json, error in 
    if let _ = error{ 
     callback?(image: UIImage(named: "placeholder")!) 
    }else if let _: AnyObject = json{ 
     do { 
     let jsonObject = try NSJSONSerialization.JSONObjectWithData(json!, options:[]) 
     let bufferData = JSON(jsonObject)["Body"]["data"].array 
     let imageData = NSData(bytes: bufferData!, length: bufferData!.count/sizeof(UInt32)) 
     let downloadImage = UIImage(data:imageData) 
     callback?(image: downloadImage!) 
     } catch { 
     print("Error[performLoginSocialRequest]: \(error)") 
     } 
    } 
} 

Но объект downloadImage всегда равен нулю. Кто-нибудь сталкивался с этой проблемой раньше? Если да, как вы можете это решить?

ответ

1

Когда вы вызываете .array на объект JSON от SwiftyJSON, он возвращает массив типа [JSON]?. Передача этого в метод NSData init работает, он фактически создает данные, по существу разбивая объекты JSON на один размер байта и сохраняя эти данные.

Что вы хотите сделать, это конвертировать bufferData от [JSON] до [UInt8].

let bufferData = JSON(jsonObject)["Body"]["data"].array 
let bytes = bufferData!.flatMap { $0.uInt8 } 
let imageData = NSData(bytes: bytes, length: bytes) 
+0

Спасибо, человек, специально для объяснения. Он работает –

+0

Если это сработало для вас, отметьте этот ответ как принятый, чтобы помочь любому, кто сталкивается с подобной проблемой. –