使用照片框架获取带有本地标识符的相册
Posted
技术标签:
【中文标题】使用照片框架获取带有本地标识符的相册【英文标题】:Fetch Album with local Identifier using Photos Framework 【发布时间】:2015-02-09 17:37:14 【问题描述】:我正在跟踪用户从哪个相册中选择了一张照片,并将其作为字符串 (albumName) 传递给下一个 VC。
我只想获取该相册中的照片以供进一步选择和处理。
这是我认为可以解决问题的方法,但我一定错过了一些东西:
-(void) fetchImages
self.assets = [[PHFetchResult alloc]init];
NSLog(@"Album Name:%@",self.albumName);
if (self.fromAlbum)
PHFetchResult *userAlbums = [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[self.albumName] options:nil];
PHAssetCollection *collection = userAlbums[0];
PHFetchOptions *onlyImagesOptions = [PHFetchOptions new];
onlyImagesOptions.predicate = [NSPredicate predicateWithFormat:@"mediaType = %i", PHAssetMediaTypeImage];
NSLog(@"Collection:%@", collection.localIdentifier);
self.assets = [PHAsset fetchAssetsInAssetCollection:collection options:onlyImagesOptions];
.....
当我登录collection.localIdentifier
时,我得到null
,因此没有获取任何收藏/专辑。
我错过了什么/搞砸了什么?
谢谢
【问题讨论】:
【参考方案1】:专辑名称不是本地标识符,这就是 fetchAssetCollectionsWithLocalIdentifiers
方法返回 nil
的原因。
此外,相册的名称不是唯一的,并且可以创建多个同名的相册,因此在这种情况下,您的应用可能无法正常运行。
我猜您之前已获取资产集合并将其'localizedTitle
保存在字符串albumName
中。
我建议您保留并使用资产集合的localIdentifier
而不是localizedTitle
并将其传递给VC。然后,您将能够使用该标识符轻松获取资产。
//Assume we have previously done this to fetch album name and identifier
PHFetchResult * myFirstFetchResult = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAny options:nil];
PHAssetCollection * myFirstAssetCollection = myFirstFetchResult.firstObject;
NSString * albumName = myFirstAssetCollection.localizedTitle;
NSString * albumIdentifier = myFirstAssetCollection.localIdentifier; //<-Add this...
//Pass albumIdentifier to VC...
//Inside your 'fetchImages' method use this to get assetcollection from passed albumIdentifier
PHFetchResult *userAlbums = [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[self.albumIdentifier] options:nil];
PHAssetCollection *collection = userAlbums.firstObject;
//Now you have successfully passed and got asset collection and you can use
【讨论】:
【参考方案2】:如果您尝试按专辑名称获取收藏,请使用下面的代码
PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init];
fetchOptions.predicate = [NSPredicate predicateWithFormat:@"title = %@", albumNamed];
PHFetchResult *fetchResult = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum
subtype:PHAssetCollectionSubtypeAny
options:fetchOptions];
PHAssetCollection *collection = fetchResult.firstObject;
【讨论】:
title
属性是什么?看起来像私有 API以上是关于使用照片框架获取带有本地标识符的相册的主要内容,如果未能解决你的问题,请参考以下文章