在视频选择的时候遇到了一个不太容易发现的bug,产生的原因是由于手机内存小,而用户又打开了相册同步iCloud, 在这时,如果本地可用内存过小,会导致将本地相册中的图片或视频删除只留缩略图,如果App调用的时候想要选取这种图片就需要从iCloud云中进行下载,才能获取原图或原视频.
// get Image
[[PHImageManager defaultManager] requestImageDataForAsset:asset options:nil resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
}];
// get Video
[[PHImageManager defaultManager] requestPlayerItemForVideo:asset options:nil resultHandler:^(AVPlayerItem * _Nullable playerItem, NSDictionary * _Nullable info) {
if (completion) completion(playerItem,info);
}];
但是往往之前没有注意到第二个输入options是用来干嘛的,
其实解决方案就来自于这个PHImageRequestOptions,PHVideoRequestOptions。
这这两个options都有一个共同的参数就是
@property (nonatomic, assign, getter=isNetworkAccessAllowed) BOOL networkAccessAllowed;
// if necessary will download the image from iCloud (client can monitor or cancel using progressHandler). Defaults to NO (see start/stopCachingImagesForAssets)
系统的解释也很详细,如果赋值YES,那么允许从iCloud中获取图片和视频,默认是NO。所以要正常获取图片或视频的URL,在云端的资源必须设为YES,不然无法读取到资源
options.networkAccessAllowed = YES;
虽然这个问题解决不是很难,但容易被忽略,我是找了很久原因才发现,所以记录一下。