最近有同事反馈页面中图片展示一半,一半灰灰的问题。一度以为是下载失败,就没当回事。后来又有其他用户反馈这样的问题,才重视起来。拿到同事手机debug,发现图片下载是成功的,能够打印出来,展示的时候却像下载失败一样。纠结半天才发现console里面有报错:ImageIO: CGImageReadCreateDataWithMappedFile 'open' failed 'xxx...'。然后百度了一下,发现还蛮多类似的问题的。
问题出现在imageWithContentsOfFile:这里,在获取本地缓存中的图片时候,图片有可能被删除,因此在使用 UIImageView.image=theimage 时展示就出问题了。一般手机剩余可用空间足够的情况下,几乎不会出现这种问题,剩余不足500M的情况下图片被删除的几率很大。
改成以下方式来展示图片,能解决问题:
NSData *imageData = [NSDatadataWithContentsOfFile:filePath];
UIImage * theimage = [UIImageimageWithData:imageData];
UIImageView.image=theimage;