iOS - MBProgressHUD - асинхронный вызов JSON - делегат приложения
Я создаю приложение, которое имеет несколько вызовов Json. Для этой цели я создал новый метод в классе делегата приложения, который выполняет эти вызовы. Этот метод вызывается из другого контроллера представления моего приложения. Я хотел бы использовать MBProgressHUD во время каждого звонка. Поэтому я использовал асинхронный вызов для извлечения данных Json и использования MBProgressHUD.
- Шоу MBProgressHUD
- Do Asynch NSURLConnection Call
- Получить данные (и скрыть MBProgressHUD)
- Делай другие операции.
Проблема в том, что на шаге 4 ответ Json пуст. Есть ли способ проверить, завершены ли шаги 2 и 3?
Я должен использовать асинхронный вызов, потому что я использую MBProgressHUD.
[MBProgressHUD showHUDAddedTo:view animated:YES];
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
NSData* data = [NSData dataWithContentsOfURL:[NSURL URLWithString:linkChiamata]];
// NSData* data;
NSArray* json;
json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
jsonResponse = [json objectAtIndex:0];
dispatch_async(dispatch_get_main_queue(), ^{
[MBProgressHUD hideHUDForView:view animated:YES];
});
});
//Esito chiamata JSON
int esitoChiamata;
esitoChiamata = [[jsonResponse objectForKey:@"codice"] intValue];
jsonResponse пуст для всех вызовов.
Заранее спасибо.
2 ответа
Вам нужно подождать, пока NSURLConnection делегирует метод успеха / неудачи, прежде чем вы будете выполнять другие операции.
Можете ли вы предоставить больше информации о том, как вы делаете вызов NSURLConnection? Вот один из способов сделать это.
Я думаю, что есть две возможности.
- Вы можете использовать NSCondition для блокировки потока и ожидания условия, прежде чем продолжить. Простой пример здесь и его легко адаптировать к вашему решению.
- Создайте функцию, работающую в фоновом режиме с блоком цвета лица. Смотрите мой ответ здесь
Надеюсь, это поможет вам.