从ALAssetsLibrary
问题描述:
返回UIImages的NSArray的
我工作的照片应用程序,这里的交易:从ALAssetsLibrary
我已创建自定义照片专辑添加了一些照片给它(用户可以创建多张唱片)。我用这个ALAssetsLibrary
和CustomPhotoAlbum类别。一切工作完美无暇,直到我需要把这些照片重新使用它们。 所以我创建了这个类别的自定义metod,我保存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]);
}];
}
我希望你明白我的观点......如果没有,只是问我会试着解释它更好的办法!
答
不要试图等待。相反,将一个块传递给您的方法,应在所有资产处理块完成时调用该方法,并将图像数组传回给调用方。调用者不应该阻止,你只是想构建你的方法来处理你正在尝试做的异步特性。
我已经管理了如何在外部获得一个'NSArray'(通过param传递目标数组),但是当我想从它获得'UIImages'时它仍然是空的... – cojoj
嘿,我正在处理同样的问题。你可以告诉我什么是enumerateGroupsWithTypes?....它显示错误在那一行.. –
'enumerateGroupsWithTypes'是枚举通过您的设备上可用的每个AssetLibrary ...所以在我的情况下,它列举了一切。 – cojoj