有这样一个需求,当需要用coredata本地缓存选择的图片数组时,coredata不支持数组格式储存,只能用Transformable类型储存,但是,Transformable类型可以储存数组,数组中可以是UIImage,但是不能储存数组中是PHAsset类型的数据,如果不储存,那么进行回显,并且进入相册又需要显示记录的选择照片,那么就无法实现,通过百度,查到以为大佬给出的具体方案,进行记录
首先我们需要保存PHAsset的localIdentifier属性,但是点到PHAsset的头文件里面会发现没有localIdentifier这个属性,这个时候你再往父类里点,也就是PHObject里,就会发现有了。
NSString *localIdentifier = asset.localIdentifier;
这样,把localIdentifier存在数组中,就可以把数组存入本地了。
那么读取本地数据时,如何使用呢?
for循环遍历数组,获取到localIdentifier
再
PHFetchResult *fetchResult = [PHAsset fetchAssetsWithLocalIdentifiers:@[str] options:nil];
PHAsset *asset = fetchResult.firstObject;
得到asset,就可以进行回显了。
有时候用户会把手机上的照片删除了,如果删除的包含APP里储存的PHAsset,那么这种情况需要进行错误处理,不然会导致crash。在这种情况下使用fetchAssetsWithLocalIdentifiers这个方法返回的PHFetchResult为空,所以如下判断即可:
PHAsset *asset = fetchResult.firstObject;
if(!asset) {
// 处理照片删除的情况
}
摘录自:https://blog.csdn.net/weixin_34177064/article/details/91428942