【问题标题】:Get NSData from buffer in Swift从 Swift 中的缓冲区获取 NSData
【发布时间】:2016-02-21 04:30:16
【问题描述】:

我正在尝试在此 URL 上获取表示为缓冲区的图像:http://apiapp-env2.elasticbeanstalk.com/?nomfile=FX1wTPcaZQ1456021964555.png

在响应中可以看到,图片是存储在JSON里面的数据对象中的一个Buffer(我不是API的拥有者,所以不能修改)

好吧,我正在尝试将图像从缓冲区转换为 UIImage。 这是我迄今为止尝试过的事情之一:

    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 对象始终为零。 以前有人遇到过这个问题吗?如果是这样,你怎么解决它?

【问题讨论】:

    标签: ios json swift uiimage nsdata


    【解决方案1】:

    当您从 SwiftyJSON 对 JSON 对象调用 .array 时,它会返回一个 [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)
    

    【讨论】:

    • 如果这对您有用,请将此答案标记为已接受,以帮助遇到类似问题的其他人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 2018-07-11
    相关资源
    最近更新 更多