【问题标题】:ALAssetLibraryGroup find camera roll in blockALAssetLibraryGroup 在块中找到相机胶卷
【发布时间】:2014-04-13 05:47:30
【问题描述】:

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

我的问题是它是异步的,我正在尝试弄清楚如何进行这种同步...如果可能的话。

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

【问题讨论】:

    标签: uicollectionview objective-c-blocks alassetslibrary


    【解决方案1】:

    我最终做的是在展示 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!");
        }];
    }
    

    【讨论】:

      猜你喜欢
      • 2020-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      • 1970-01-01
      • 2017-11-28
      • 2021-03-10
      相关资源
      最近更新 更多