отправка _группа _ожидание с НОД

Итак, я отправляю массив изображений на свой сервер. Я хочу использовать GCD для асинхронной отправки массива, но я также хочу сделать метод, в котором это происходит, синхронным, чтобы я мог вернуть один объект ответа. Однако метод dispatch _group _wait, кажется, возвращается немедленно (и не ждет завершения моих блоков ). Это проблема, потому что я использую блок внутри блока?

NSArray *keys = [images allKeys];
__block NSMutableDictionary *responses = [NSMutableDictionary dictionaryWithCapacity:[images count]];

dispatch_group_t group = dispatch_group_create();
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
for (int i = 0; i < [keys count]; i++) {
    __block NSString *key = [keys objectAtIndex:i];
    dispatch_group_async(group, queue, ^{
        [self postImage:[images objectForKey:key] completionHandler:^(ServerResponse *response){
            @synchronized(responses){
                if ([response succeeded]) {
                    NSString *value = [[response data] objectForKey:@"image_token"];
                    [responses setObject:value forKey:key];
                    NSLog(@"inside success %@",responses);
                } else {
                    NSString *error = response.displayableError;
                    if (!error) {
                        error = @"Sorry something went wrong, please try again later.";
                    }
                    [responses setObject:error forKey:@"error"];
                    [responses setObject:response forKey:@"response"];
                }
            }
        }];
    });
}
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
dispatch_release(group);

Я хочу просто дождаться обратного вызова всех методов [self postImage] с сервера и изменить словарь ответов.

5
задан Msencenb 19 August 2012 в 21:18
поделиться