我正在开发照片应用程序,这是交易:
我创建了自定义相册并添加了一些照片(用户可以制作多张相册)。我将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]);
}];
}
我希望你能得到我的观点......如果没有,请问我,我会尝试更好地解释它!
答案 0 :(得分:1)
不要试图等待。相反,将块传递给您的方法,该方法应在所有资产处理块完成时调用,并将图像数组传递回调用方。调用者不应该阻塞,你只想构建你的方法来处理你想要做的事情的异步性。