Я загружаю асинхронно некоторый объект, я храню его в массиве. Далее для каждого объекта я загружаю некоторые координаты с геокодированием (он также асинхронно) и обновляет мою базу данных для каждого объекта с новыми параметрами, которые являются координатами. Мой метод выглядит следующим образом:Как ждать всех асинхронных задач?
- (void)downloadObjectsWithTitle:(NSString *)title andHandler:(void(^)(NSMutableDictionary *result))handler {
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
NSMutableURLRequest *request = [httpClient requestWithMethod:@"GET"
path:nil
parameters:nil];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[httpClient registerHTTPOperationClass:[AFHTTPRequestOperation class]];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
//I get here array of objects
//now for each object I want to download geocoding localization so i called another asynchronyous method getLocationWithTitle:andHandler;
for(int i = 0; i < resutArray.count; i++) {
[self downloadLocationWithString:[dictionary objectForKey:@"string"] andHandler:^(NSMutableDictionary *result) {
//update database;
}];
}
handler(dictionary);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
[operation start];
}
Мой вопрос заключается в том, как downalod координаты для каждого объекта, и что пожар:
handler(dictionary);
так ждать каждую координату загрузки (для каждого объекта), прежде чем бросить курить метод (пожар обработчик).
Thnaks для всех sugestions.
Это решение будет одобрено, если у меня будет только один запрос на геокодирование. Но для нескольких это не работает. – edzio27
принять глобальную переменную и присвоить ее по общему количеству. из загрузок, когда загрузка завершается, просто уменьшайте переменную на 1. Вы можете проверить значение этой переменной, если ее 0, а затем все загрузки ура завершены. – keen