首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ALAssetLibraryGroup在块中查找摄像机卷轴

ALAssetLibraryGroup在块中查找摄像机卷轴
EN

Stack Overflow用户
提问于 2014-04-13 13:47:30
回答 1查看 248关注 0票数 1

self.assetsGroup为nil时,我正在尝试获取ALAssetsGroup的“相机胶卷”。

我的问题是它是异步的,我正在尝试弄清楚我如何才能做到这一点sync...if它是可能的。

代码语言:javascript
复制
- (void)viewDidLoad
{
    [super viewDidLoad];

    if (!self.assetsLibrary) {
        _assetsLibrary = [[ALAssetsLibrary alloc] init];
    }

    if (!self.assetsGroups) {
        _assetsGroups = [[NSMutableArray alloc] init];
    } else {
        [self.assetsGroups removeAllObjects];
    }

    ALAssetsLibraryGroupsEnumerationResultsBlock listGroupBlock = ^(ALAssetsGroup *group, BOOL *stop) {

        ALAssetsFilter *onlyPhotosFilter = [ALAssetsFilter allPhotos];
        [group setAssetsFilter:onlyPhotosFilter];
        if ([group numberOfAssets] > 0)
        {
            [self.assetsGroups addObject:group];
        } else {
            [self.collectionView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
        }
    };

    // enumerate only photos
    NSUInteger groupTypes = ALAssetsGroupAlbum | ALAssetsGroupEvent | ALAssetsGroupFaces | ALAssetsGroupSavedPhotos;
    [self.assetsLibrary enumerateGroupsWithTypes:groupTypes usingBlock:listGroupBlock failureBlock:nil];
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    if (!self.assetsGroup) {
        __block ALAssetsGroup *cameraRollGroup = nil;
        NSUInteger groupTypes = ALAssetsGroupAlbum | ALAssetsGroupEvent | ALAssetsGroupFaces | ALAssetsGroupSavedPhotos;
        [self.assetsLibrary enumerateGroupsWithTypes:groupTypes usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
            // Set to Camera Roll
            if ([[group valueForProperty:@"ALAssetsGroupPropertyType"] intValue] == ALAssetsGroupSavedPhotos) {
                cameraRollGroup = group;
                *stop = YES;
                return;
            }
        } failureBlock:^(NSError *error) {

        }];

        self.assetsGroup = cameraRollGroup;
    }

    self.title = [self.assetsGroup valueForProperty:ALAssetsGroupPropertyName];
    NSLog(@"TITLE %@", self.title); // outputs NULL


    if (!self.assets) {
        _assets = [[NSMutableArray alloc] init];
    } else {
        [self.assets removeAllObjects];
    }

    ALAssetsGroupEnumerationResultsBlock assetsEnumerationBock = ^(ALAsset *result, NSUInteger index, BOOL *stop) {

        if (result) {
            [self.assets addObject:result];
        } else {
            [self.collectionView reloadData];
        }

    };

    ALAssetsFilter *onlyPhotosFilter = [ALAssetsFilter allPhotos];
    [self.assetsGroup setAssetsFilter:onlyPhotosFilter];
    [self.assetsGroup enumerateAssetsUsingBlock:assetsEnumerationBock];
}
EN

回答 1

Stack Overflow用户

发布于 2014-04-14 11:19:32

我最终做的是在呈现uiviewcollection控制器之前加载组。

代码语言:javascript
复制
- (void)presentAlbumCollection
{
    ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
    NSUInteger groupTypes = ALAssetsGroupSavedPhotos;
    [assetsLibrary enumerateGroupsWithTypes:groupTypes usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
        if ([[group valueForProperty:@"ALAssetsGroupPropertyType"] intValue] == ALAssetsGroupSavedPhotos) {

            AlbumCollectionViewController *albumCollectionViewController = [[AlbumCollectionViewController alloc] initWithAssetsLibrary:assetsLibrary];
            albumCollectionViewController.assetsGroup = group;
            [self.view.window.rootViewController presentViewController:albumCollectionViewController animated:YES completion:nil];

        }
    } failureBlock:^(NSError *error) {
        NSLog(@"NOT FOUND!");
    }];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23039593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档