PHAsset获取UIImage返回nil的问题

作者: 苏永茂 | 来源:发表于2016-08-11 14:32 被阅读1589次

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 。

具体的截图是这样的 。

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

相关文章

网友评论

  • Stroman:不够你此时下载的是缩略图吧?
  • Stroman:点个赞,我给你。
  • 梁森的简书:问个问题:我有了UIImage对象,如何获取它的名称呢? 要求使用PHAsset ,因为使用ALAsset在iphone7上获取不到图片名称(iphone6上是可以的,系统都一样)
  • 糊涂0:我遇到过一种,我们测试的手机有几张图片在相册展示是好的,但是我自己写相册取图片(缩略图能拿到)就是不行,她这几张图片在微信,qq,钉钉上小图(缩略图)都能拿到,但是拿不到大图,所以这种图片不好解决!
  • liang1991:你好,想问下能否通过PHAsset或者其它的判断一张照片正在从iCloud同步;就像微信或者qq那样如果照片正在从iCloud同步就不让选中,会给个提示照片正在从iCloud下载,下载完成后再使用..
    苏永茂:@liang1991 那就直接把下载关闭 ,然后拿到了asset 去取图片 ,返回nil ,就是云端 ,返回图片就是本地吧 。就像我图片里 ,唯一的返回nil 的就是那张云端的图 。相册里可以查到 asset 地址 。
    liang1991:@苏永茂 首先感谢你的回复;但是跟我的需求不太相符,我不需要去主动下载iCloud上的图片;我需要的是一个判断图片是在iCloud上还是在本地的方法,如果是来自iCloud上的图片我就给个弹窗提示不让用户选择。
    苏永茂:@liang1991 progressHandler 这个block 可以回调下载的进度信息

本文标题:PHAsset获取UIImage返回nil的问题

本文链接:https://www.haomeiwen.com/subject/ldcssttx.html