2012-03-14 13 views
0

不知道这是否是该问题的正确标题或者不是。通常,我有一个字典数组,并且正在迭代字典,传递一个有时会被执行的块未来(异步)并将结果保存在字典中。这里是我的方法:使用异步块对NSArray进行迭代

- (void)elcImagePickerController:(ELCImagePickerController *)picker didFinishPickingMediaWithInfo:(NSArray *)info { 

    NSLog(@"%@", info); 
    NSMutableDictionary *images = [NSMutableDictionary dictionaryWithCapacity:[info count]]; 

    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 
    for (NSDictionary *dict in info) { 
     NSURL *assetURL = [dict objectForKey:UIImagePickerControllerReferenceURL]; 

     [library assetForURL:assetURL 
       resultBlock:^(ALAsset *asset) { 
        NSString *filename = asset.defaultRepresentation.filename; 
        UIImage *image = [dict objectForKey:UIImagePickerControllerOriginalImage]; 
        [images setObject:filename forKey:image]; 
       } 
       failureBlock:^(NSError *error) { 
        [SVProgressHUD dismissWithError:@"Error occured."]; 
       } 
     ]; 
    } 

    NSLog(@"%@", images); 

    [library autorelease]; 
    [self dismissImagePickerVC]; 
} 

Ofcourse,在这个方法结束时,图像是空的,但我的问题是,如何才能得到一个电话回来时,一切为每次迭代块已被执行? Thansk

回答

0

Apple's documentation

当枚举完成后,enumerationBlock调用设置为零组。

枚举完成后,您的第一个块将会看到asset == nil

+0

这同我尝试做不同的... – 0xSina 2012-03-14 10:43:09

+0

我需要找到资产之前,我通过他们列举...... – 0xSina 2012-03-14 10:47:13

+0

@PragmaOnce *您找到*资产通过*使用'ALAssetsLibrary'枚举*通过他们。当然,如果你愿意的话,你可以将它们存储在你选择的容器中,以便再次遍历它们。您也可以在看到'nil'时进行回调,并在块中计算它们的数量。一旦数字达到字典中的项目数量,就知道所有回调都已完成。 – dasblinkenlight 2012-03-14 10:56:51