PHAsset获取UIImage返回nil的问题
今天帮一个网友解决了这样一个问题 。他用photo框架,获取了一组图片资源的asset ,然后调用
- (PHImageRequestID)requestImageForAsset:(PHAsset *)asset targetSize:(CGSize)targetSize contentMode:(PHImageContentMode)contentMode options:(nullable PHImageRequestOptions *)options resultHandler:(void (^)(UIImage *__nullable result, NSDictionary *__nullable info))resultHandler;
获取图片,运行的时候,一般都是正常的 ,但是当取到相册中的某一张图的时候, result 就会返回 nil 。
具体的截图是这样的 。
可以看出他获取了4个PHAsseat 。打印的都是正常的 。没有异常 ,然后循环的去取出对应的图片 。到了第三个的时候却返回了nil 。
首先我怀疑的是图片本事问题 。所以让他用 UIImagePicker 的方法获取这个图 。一下是截图 :
我们看到,图片正确的返回了 。而且对比可以看到他的格式、大小、地址等等都是正常的 。
解决
那么问题是什么 。我们知道photo框架中一个asset就是一个图片资源的地址 。我们用地址就可以取出对应的图片 。但是苹果手机针对手机空间的有限性 ,提供了iCloud 云同步来解决图片视频等占用空间过大的问题 。所有,我们手机本地只需要存放云端图片的资源地址 ,需要时候的时候再去获取 。就节省了手机本地的存储空间 。但是在获取图片的方法中 ,默认却是关闭网络获取iCloud的图片的功能 。
if necessary will download the image from iCloud (client can monitor or cancel using progressHandler). Defaults to NO (see start/stopCachingImagesForAssets)
@property (nonatomic, assign, getter=isNetworkAccessAllowed) BOOL networkAccessAllowed;
示例代码
PHImageRequestOptions *imageRequestOption = [[PHImageRequestOptions alloc] init];
imageRequestOption.synchronous = YES;
imageRequestOption.networkAccessAllowed = YES;