iOS如何本地储存PHAsset

栏目: IOS · 发布时间: 5年前

内容简介:最近公司有个需求,需要缓存信息中要发送的照片,下次打开viewController的时候直接显示照片。思路是在退出viewcontroller的时候储存PHAsset,下一次打开那个viewController的时候通过PHAsset去加载这个图片。百度上搜索出的只有说需要储存PHAsset的localIdentifier,实际上看完我也很蒙,并没有人列出代码说具体的做法。下面描述一下我的具体做法。说在最前面,我确实是通过localIdentifier储存PHAsset的。

最近公司有个需求,需要缓存信息中要发送的照片,下次打开viewController的时候直接显示照片。思路是在退出viewcontroller的时候储存PHAsset,下一次打开那个viewController的时候通过PHAsset去加载这个图片。

百度上搜索出的只有说需要储存PHAsset的localIdentifier,实际上看完我也很蒙,并没有人列出代码说具体的做法。下面描述一下我的具体做法。

说在最前面,我确实是通过localIdentifier储存PHAsset的。

点到PHAsset的头文件里面会发现没有localIdentifier这个属性,这个时候你再往父类里点,也就是PHObject里,就会发现有了。

首先我们需要保存localIdentifier(如何存储NSString这里就不说了):

NSString *localIdentifier = asset.localIdentifier;
// 本地存储
复制代码

把这个字符串存下来是没有什么疑问了,然后下一次要怎么用呢?

PHFetchResult *fetchResult = [PHAsset fetchAssetsWithLocalIdentifiers:@[str] options:nil];
PHAsset *asset = fetchResult.firstObject;
复制代码

上述这段代码就可以根据localIdentifier返回PHAsset,但是先返回的是一个PHFetchResult类型的对象,这个对象是什么呢,点到头文件里:

@interface PHFetchResult<ObjectType> : NSObject <NSCopying, NSFastEnumeration>
复制代码

可以看出来他实现了NSCopying和NSFastEnumeration协议,也就是说他可以使用快速枚举和copy方法,而且从它的属性可以看出来它像是一个array。

+ (PHFetchResult<PHAsset *> *)fetchAssetsWithLocalIdentifiers:(NSArray<NSString *> *)identifiers options:(nullable PHFetchOptions *)options;
复制代码

因为上述这个方法是要传一个string泛型的数组进去,所以我传一个进去实际上就拿到一个PHAsset。

所以

PHAsset *asset = fetchResult.firstObject;
PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];
options.synchronous = YES;
[[PHImageManager defaultManager]requestImageForAsset:asset targetSize:CGSizeMake(asset.pixelWidth, asset.pixelHeight) contentMode:PHImageContentModeDefault options:options resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
	[photos addObject:result];
}];
复制代码

使用上述代码就可以通过PHAsset再次拿到你上次拿到的照片了。

最后还有一个重点: 有时候用户会把手机上的照片删除了,如果删除的包含APP里储存的PHAsset,那么这种情况需要进行错误处理,不然会导致crash。在这种情况下使用fetchAssetsWithLocalIdentifiers这个方法返回的PHFetchResult为空,所以如下判断即可:

PHAsset *asset = fetchResult.firstObject;
if (!asset) {
	// 处理照片删除的情况
}
复制代码

以上所述就是小编给大家介绍的《iOS如何本地储存PHAsset》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

软件研发之道

软件研发之道

Jim McCarthy、Michele McCarthy / 赵 俐、石华耀 / 人民邮电出版社 / 2011-8 / 45.00元

Jim McCarlthy等的《软件研发之道 微软开发团队的经验法则》叙述 了微软Visual C++开发团队的故事,通过作者的总结和归纳告诉读者如何 构建一个优秀的软件开发团队,如何在一段时间内成功地交付一个软件。 作为升级版,作者将言简意赅的法则扩展到57条,包括了软件研发及营销 的全部内容,相信每一位项目经理都会对此书爱不释手。 《软件研发之道 微软开......一起来看看 《软件研发之道》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

html转js在线工具
html转js在线工具

html转js在线工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具