从ALAssetsLibrary返回UIImages的NSArray

时间:2013-07-30 09:20:11

标签: ios uiimage objective-c-blocks nsthread alassetslibrary

我正在开发照片应用程序,这是交易:

我创建了自定义相册并添加了一些照片(用户可以制作多张相册)。我将ALAssetsLibrary用于此CustomPhotoAlbum类别。一切都完美无缺,直到我需要将这些照片重新用于重复使用。 所以我已经为这个类别创建了自定义元数据,我将UIImages保存到NSMutableArray但是我希望这个方法将这个数组保存到外面......我的问题是enumerateAssetsUsingBlock:在后​​台运行我希望访问它们时将照片保存到相册!如何让此方法等到每张照片都加载到相册然后返回NSArray

这是我的方法:

 - (void)loadImagesFromAlbumNamed:(NSString *)name
{
    NSMutableArray *photos = [[NSMutableArray alloc] init];

    [self enumerateGroupsWithTypes:ALAssetsGroupAll
                        usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
                            if (group == nil) {
                                return;
                            }

                            if ([[group valueForProperty:ALAssetsGroupPropertyName] isEqualToString:name]) {
                                [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
                                    if (result == nil) {
                                        return;
                                    }

                                    // NSLog(@"%@", result);
                                    UIImage *image = [UIImage imageWithCGImage:(__bridge CGImageRef)([result defaultRepresentation])];
                                    [photos addObject:image];
                                }];
                                NSLog(@"%@", [photos description]);
                            }
                        } failureBlock:^(NSError *error) {
                            NSLog(@"%@", [error localizedDescription]);
                        }];
}

我希望你能得到我的观点......如果没有,请问我,我会尝试更好地解释它!

1 个答案:

答案 0 :(得分:1)

不要试图等待。相反,将块传递给您的方法,该方法应在所有资产处理块完成时调用,并将图像数组传递回调用方。调用者不应该阻塞,你只想构建你的方法来处理你想要做的事情的异步性。