我正在尝试使用该相册名称检索所有相册名称和所有照片。我从[group valueForProperty:ALAssetsGroupPropertyName]
获得的相册名称大部分都是正确的,但有一个专辑名称显示为(null)
而且名为Favorites
的专辑未显示。
专辑名称数组:
((null), Camera Roll, Last Import, Nissan Juke, Cam)
这是我的代码
-(void)getPhotosFromAssetsLibWithPhotoFilter:(NSString *)filterAlbumString
{
_assets = [@[] mutableCopy];
__block NSMutableArray *tmpAssets = [@[] mutableCopy];
__block NSMutableArray *albumGroup = [@[] mutableCopy];
ALAssetsLibrary *assetsLibrary = [PhotoLibViewController defaultAssetsLibrary];
[assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop)
{
[group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop)
{
if(result)
{
if (![filterAlbumString isEqualToString:@""])
{
if ([[NSString stringWithFormat:@"%@", [group valueForProperty:ALAssetsGroupPropertyName]] isEqualToString:filterAlbumString])
{
[tmpAssets addObject:result];
}
}
else
{
[tmpAssets addObject:result];
}
}
}];
[albumGroup addObject:[NSString stringWithFormat:@"%@", [group valueForProperty:ALAssetsGroupPropertyName]]];
dispatch_async(dispatch_get_main_queue(), ^{
if ([self respondsToSelector:@selector(retrievedPhotoLibrary:)])
{
NSArray *albumGroupReversed = [[albumGroup reverseObjectEnumerator] allObjects];
[self retrievedPhotoLibrary:albumGroupReversed];
}
});
self.assets = [[tmpAssets reverseObjectEnumerator] allObjects];
[self.collectionView reloadData];
} failureBlock:^(NSError *error) {
NSLog(@"Error loading images %@", error);
}];
}
我想知道为什么有一个(null)
专辑名称以及专辑名称Favorites
未显示的原因。
感谢。
答案 0 :(得分:1)
枚举完成后,调用enumerationBlock
并将组设置为nil,因此每次group
为零时都要检查,并且仅在枚举时执行reloadData
完成。正确的逻辑应如下所示:
[assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop)
{
if (group != nil)
{
[group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop)
{
if(result)
{
if (![filterAlbumString isEqualToString:@""])
{
if ([[NSString stringWithFormat:@"%@", [group valueForProperty:ALAssetsGroupPropertyName]] isEqualToString:filterAlbumString])
{
[tmpAssets addObject:result];
}
}
else
{
[tmpAssets addObject:result];
}
}
}];
[albumGroup addObject:[NSString stringWithFormat:@"%@", [group valueForProperty:ALAssetsGroupPropertyName]]];
}
else
{
dispatch_async(dispatch_get_main_queue(), ^{
if ([self respondsToSelector:@selector(retrievedPhotoLibrary:)])
{
NSArray *albumGroupReversed = [[albumGroup reverseObjectEnumerator] allObjects];
[self retrievedPhotoLibrary:albumGroupReversed];
}
});
self.assets = [[tmpAssets reverseObjectEnumerator] allObjects];
[self.collectionView reloadData];
}
} failureBlock:^(NSError *error) {
NSLog(@"Error loading images %@", error);
}];
对于Favorites
,它是iOS8 PhotoKit
中的新功能:
借助iOS 8,Apple为我们提供了PhotoKit,这是一个比AssetsLibrary更高效的现代框架,并提供允许应用程序与设备的照片库无缝协作的功能。
收藏和隐藏资产
要查看资产是否已标记为收藏或用户是否隐藏,只需检查PHAsset实例的收藏夹和隐藏属性。
另请参阅:The Photos Framework
因此,您必须通过Favorites
框架显示PhotoKit
,请查看官方示例项目:ExampleappusingPhotosframework.zip。