ios-获取相册列表的简单示例?
我正在尝试使用以下方法获取设备中可用的相册列表: 到目前为止,我的viewDidLoad中有以下内容:ios-获取相册列表的简单示例?,ios,iphone,objective-c,ios7,Ios,Iphone,Objective C,Ios7,我正在尝试使用以下方法获取设备中可用的相册列表: 到目前为止,我的viewDidLoad中有以下内容: // Get albums NSMutableArray *groups = [NSMutableArray new]; ALAssetsLibrary *library = [ALAssetsLibrary new]; ALAssetsLibraryGroupsEnumerationResultsBlock listGroupBlock = ^(ALAssetsGroup *group,
// Get albums
NSMutableArray *groups = [NSMutableArray new];
ALAssetsLibrary *library = [ALAssetsLibrary new];
ALAssetsLibraryGroupsEnumerationResultsBlock listGroupBlock = ^(ALAssetsGroup *group, BOOL *stop) {
if (group) {
[groups addObject:group];
}
};
NSUInteger groupTypes = ALAssetsGroupAlbum;
[library enumerateGroupsWithTypes:groupTypes usingBlock:listGroupBlock failureBlock:nil];
NSLog(@"%@", groups);
但是,没有向组数组添加任何内容。我希望看到NSLog中的两个项目。看起来响应出现在异步响应listGroupBlock中,但您的NSLog正好在调用之后。所以组仍然是空的,并且不会在当前线程中填充 添加登录listGroupBlock怎么样
ALAssetsLibraryGroupsEnumerationResultsBlock listGroupBlock = ^(ALAssetsGroup *group, BOOL *stop) {
if (group) {
[groups addObject:group];
}
NSLog(@"%@", groups);
// Do any processing you would do here on groups
[self processGroups:groups];
// Since this is a background process, you will need to update the UI too for example
[self.tableView reloadData];
};
对于IOS9以后的版本,ALAsset库已被弃用。相反,Photos框架引入了一种称为PHAsset的新资产类型。您可以使用PHAssetCollection类检索相册
PHFetchResult *userAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAny options:nil];
PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAny options:nil];
PhaseSetCollectionType定义相册的类型。您可以迭代fetchResults以获得每个相册
[userAlbums enumerateObjectsUsingBlock:^(PHAssetCollection *collection, NSUInteger idx, BOOL *stop) {}];
照片框架中的相册由PhaseSetCollection表示。记录在block works中。我想问题在于你说的。但是我如何确保在迭代其内容之前填充
组
?因为listGroupBlock是从后台线程(而不是您创建它的线程)调用的,所以您需要在listGroupBlock
中的组上执行任何处理,就在我们记录它的地方。这也意味着您是否也需要从listGroupBlock
更新UI。例如,如果要在UITableView中显示它,还需要在列表组块中调用[tableView reloadData]
。有道理吗?好的。这种方法也应该很好。谢谢