Я пытаюсь использовать новый sendAsynchronousRequest, добавленный в iOS5.
У меня есть класс модели (File) с методом, который запрашивает некоторые данные с сервера, а затем передает эти данные в класс контроллера (FilesController), который создал объект модели.
В классе модели есть метод со следующим кодом:
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
NSArray *decodedResponse = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSArray *files = [self _dictionariesToFiles:decodedResponse];
handler(files);
}];
Класс контроллера, использует его так:
[File findAll:conditions completionHandler:^(NSArray *files) {
dataSource = files;
NSLog(@"set");
[self.tableView reloadData];
NSLog(@"reload");
activityIndicator.hidden = TRUE;
}];
В консоли я могу сразу увидеть, как NSLogs показывает сообщения «set» и «reload», но таблица и индикатор не изменяются, пока не пройдет несколько секунд (5-10 с).
Кто-нибудь знает, в чем проблема?
Спасибо.
PD: Я изменил асинхронный запрос на совместимый синхронизированный, и затем проблема исчезла, но я хочу использовать для этого асинхронный запрос.
Это совместимый код синхронизации:
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSArray *decodedResponse = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:nil];
NSArray *files = [self _dictionariesToFiles:decodedResponse];
handler(files);