2012-03-14 15 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