2012-03-14 14 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]; 
} 

勿論、この方法の最後で、画像は空ですが、各反復のためのすべてのブロックが実行されたとき、私の質問は、どのように私はコールバックを得ることができていますか? Apple's documentationから Thansk

答えて

0

:列挙が行われると

、enumerationBlockはnilに設定されたグループで呼び出されます。

列挙が行われると、最初のブロックにasset == nilが表示されます。

+0

これは私がやろうとしていることとは違っています... – 0xSina

+0

私はそれらを列挙する前に資産を見つける必要があります... – 0xSina

+0

@PragmaOnce * ALAssetsLibraryを使用して資産を*列挙する*。もちろん、希望の場合は、それらを繰り返し処理するために、それらを選択したコンテナに格納することもできます。 'nil'を見たらコールバックを作り、そのブロック内の番号を数えることもできます。数字が辞書の項目数に達すると、すべてのコールバックが終了したことがわかります。 – dasblinkenlight

関連する問題