ALAssetLibraryGroup在块中查找相机胶卷

时间:2014-04-13 05:47:30

标签: uicollectionview objective-c-blocks alassetslibrary

我正在尝试获取ALAssetsGroup"相机胶卷"当self.assetsGroup为零时。

我的问题是它是异步的,我试图找出如何进行同步......如果可能的话。

- (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];
}

1 个答案:

答案 0 :(得分:0)

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

- (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!");
    }];
}