Итак, я отправляю массив изображений на свой сервер. Я хочу использовать 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] с сервера и изменить словарь ответов.