Итерация по NSArray с асинхронным блоком - PullRequest
0 голосов
/ 14 марта 2012

Не уверен, что это правильный заголовок для этого вопроса или нет .. В любом случае, у меня есть массив словарей, и я перебираю словари, передавая блок, который иногда выполняется в будущем (асинхронный), и сохраняюрезультат в словаре.Вот мой метод:

- (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];
}

Конечно, в конце этого метода изображения пустые, но мой вопрос, как я могу получить обратный вызов, когда все блоки для каждой итерации были выполнены?Thansk

1 Ответ

0 голосов
/ 14 марта 2012

Из Документация Apple :

Когда перечисление завершено, enumerationBlock вызывается с группой, установленной в ноль.

Когда перечисление выполнено, ваш первый блок будет видеть asset == nil.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...