获取" JPEGDecompressSurface:图片解码失败:"从iOS 10上的JPG原始数据创建UIImage

时间:2016-10-17 13:54:30

标签: ios

自从更新到iOS 10以来,我在从NSMutableData创建UIImage时遇到以下错误:

  

JPEGDecompressSurface:图片解码失败:e000 ....."

没有产生任何奇怪或不正常的行为,但是当我调试我的应用程序时,每次创建图像时都会看到错误。

以下是代码,我使用GCDAsynchSocket class:

从下载的数据创建图像
NSData *imgDataToGen = [NSData dataWithData:imgBuffer];
UIImage *img = [[UIImage alloc] initWithData:imgDataToGen];
[_delegate client:self didReceiveImage:img];

缓冲区imgBufferNSMutableData-Object,它保存下载的图像数据。下载完成后,数据将转换为图片并通过触发自定义委托方法传递到主GUI。在主GUI中,然后在图像View中设置图像。 处理完图像后,缓冲区将被清除。

我尝试了不同的东西,比如强制在后台线程中解码UIImage,但我总是得到同样的错误。图像总是以正确的方式呈现,所以我真的不理解错误信息。

我尝试iPhone 5c iOS 10.0.2Simulator 5s iOS 9.210.0.2

iPhone 5c我收到错误,在模拟器上没有。

如何修复此错误,或者是否可以忽略此类错误?

1 个答案:

答案 0 :(得分:0)

我有同样的问题并解决了。 在我的情况下,我没有注意到,但是当我将异步调度到具有后台QOS优先级的全局队列并且仅刷新GUI UIImage I时,在主线程中执行从Data到UIImage的转换和保存。调度回主队列,错误停止显示在调试器中。 我希望它可以帮助你。

示例:

fileprivate func downloadFromURL(urlString:String, callback:((_ image:UIImage?, _ error: Error?)->Void)?)   {
    var image: UIImage?
    guard let url = URL(string: urlString) else {
        callback!(nil, iError.RuntimeError(reason: "Wrong URL for image".localized))
        return
    }
    DispatchQueue.global(qos: .background).async {
        do {
            let data = try Data(contentsOf: url)
            image = UIImage(data: data)
            DispatchQueue.main.async {
                callback!(image,nil)
                return
            }

        } catch {
            print(error.localizedDescription)
            callback!(nil, iError.RuntimeError(reason: "Data error for image".localized))
            return

        }
    }
}