有這樣一個(gè)需求,當(dāng)需要用coredata本地緩存選擇的圖片數(shù)組時(shí)峭拘,coredata不支持?jǐn)?shù)組格式儲(chǔ)存俊庇,只能用Transformable類型儲(chǔ)存,但是鸡挠,Transformable類型可以儲(chǔ)存數(shù)組辉饱,數(shù)組中可以是UIImage,但是不能儲(chǔ)存數(shù)組中是PHAsset類型的數(shù)據(jù)拣展,如果不儲(chǔ)存彭沼,那么進(jìn)行回顯,并且進(jìn)入相冊(cè)又需要顯示記錄的選擇照片瞎惫,那么就無(wú)法實(shí)現(xiàn)溜腐,通過(guò)百度,查到以為大佬給出的具體方案瓜喇,進(jìn)行記錄
首先我們需要保存PHAsset的localIdentifier屬性挺益,但是點(diǎn)到PHAsset的頭文件里面會(huì)發(fā)現(xiàn)沒(méi)有l(wèi)ocalIdentifier這個(gè)屬性,這個(gè)時(shí)候你再往父類里點(diǎn)乘寒,也就是PHObject里望众,就會(huì)發(fā)現(xiàn)有了。
NSString *localIdentifier = asset.localIdentifier;
這樣伞辛,把localIdentifier存在數(shù)組中烂翰,就可以把數(shù)組存入本地了。
那么讀取本地?cái)?shù)據(jù)時(shí)蚤氏,如何使用呢甘耿?
for循環(huán)遍歷數(shù)組,獲取到localIdentifier
再
PHFetchResult *fetchResult = [PHAsset fetchAssetsWithLocalIdentifiers:@[str] options:nil];
PHAsset *asset = fetchResult.firstObject;
得到asset竿滨,就可以進(jìn)行回顯了佳恬。
有時(shí)候用戶會(huì)把手機(jī)上的照片刪除了捏境,如果刪除的包含APP里儲(chǔ)存的PHAsset,那么這種情況需要進(jìn)行錯(cuò)誤處理毁葱,不然會(huì)導(dǎo)致crash垫言。在這種情況下使用fetchAssetsWithLocalIdentifiers這個(gè)方法返回的PHFetchResult為空,所以如下判斷即可:
PHAsset *asset = fetchResult.firstObject;
if(!asset) {
// 處理照片刪除的情況
}
摘錄自:https://blog.csdn.net/weixin_34177064/article/details/91428942