PHAsset获取UIImage返回nil的问题

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 。

具体的截图是这样的 。

PHAsset获取UIImage返回nil的问题_第1张图片
photo

可以看出他获取了4个PHAsseat 。打印的都是正常的 。没有异常 ,然后循环的去取出对应的图片 。到了第三个的时候却返回了nil 。
首先我怀疑的是图片本事问题 。所以让他用 UIImagePicker 的方法获取这个图 。一下是截图 :

PHAsset获取UIImage返回nil的问题_第2张图片
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;

stackOverFlow参考

http://blog.csdn.net/jeffasd/article/details/50465244

你可能感兴趣的:(PHAsset获取UIImage返回nil的问题)