Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ios-获取相册列表的简单示例?_Ios_Iphone_Objective C_Ios7 - Fatal编程技术网

ios-获取相册列表的简单示例?

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,

我正在尝试使用以下方法获取设备中可用的相册列表:

到目前为止,我的viewDidLoad中有以下内容:

// 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]
。有道理吗?好的。这种方法也应该很好。谢谢