【问题标题】:ios - Simple example to get list of photo albums?ios - 获取相册列表的简单示例?
【发布时间】:2014-01-15 07:12:45
【问题描述】:

我正在尝试使用the reference from here 获取设备中可用的相册列表:

到目前为止,我的 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 中看到 2 个项目。

【问题讨论】:

    标签: ios iphone objective-c ios7


    【解决方案1】:

    看起来响应来自异步响应 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];
    };
    

    【讨论】:

    • 登录块工作。我想问题是你说的。但是如何确保在迭代其内容之前填充 groups
    • 由于 listGroupBlock 是从后台线程(而不是您创建它的线程)调用的,您需要对 listGroupBlock 中的组进行任何处理,就在我们记录它的位置。这也意味着您是否也需要从 listGroupBlock 更新您的 UI。例如,如果你在 UITableView 中显示它,你还需要在listGroupBlock 中调用[tableView reloadData]。有意义吗?
    • 好的。这种方法也应该没问题。谢谢。
    【解决方案2】:

    对于 IOS9 及更高版本,ALAsset 库已被弃用。取而代之的是,照片框架引入了一种名为 PHAsset 的新资产类型。您可以使用 PHAssetCollection 类检索相册。

    PHFetchResult *userAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAny options:nil];
    PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAny options:nil];
    

    PHAssetCollectionType 定义相册的类型。您可以迭代 fetchResults 以获取每个专辑。

    [userAlbums enumerateObjectsUsingBlock:^(PHAssetCollection *collection, NSUInteger idx, BOOL *stop) {}];
    

    相册框架中的相册由 PHAssetCollection 表示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      相关资源
      最近更新 更多