自从更新到iOS 10以来,我在从NSMutableData创建UIImage时遇到以下错误:
JPEGDecompressSurface:图片解码失败:e000 ....."
没有产生任何奇怪或不正常的行为,但是当我调试我的应用程序时,每次创建图像时都会看到错误。
以下是代码,我使用GCDAsynchSocket
class:
NSData *imgDataToGen = [NSData dataWithData:imgBuffer];
UIImage *img = [[UIImage alloc] initWithData:imgDataToGen];
[_delegate client:self didReceiveImage:img];
缓冲区imgBuffer
是NSMutableData-Object
,它保存下载的图像数据。下载完成后,数据将转换为图片并通过触发自定义委托方法传递到主GUI。在主GUI中,然后在图像View中设置图像。
处理完图像后,缓冲区将被清除。
我尝试了不同的东西,比如强制在后台线程中解码UIImage,但我总是得到同样的错误。图像总是以正确的方式呈现,所以我真的不理解错误信息。
我尝试iPhone 5c
iOS 10.0.2
和Simulator 5s
iOS 9.2
和10.0.2
。
在iPhone 5c
我收到错误,在模拟器上没有。
如何修复此错误,或者是否可以忽略此类错误?
答案 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
}
}
}