Есть проблемы с использованием синхронных запросов. Проблема заключается в том, что я не совсем уверен, как реорганизовать приведенный ниже код, чтобы использовать асинхронный запрос для выполнения следующих двух задач:
- Используйте подпункт
UIActivityIndicatorView
для уведомления об активной загрузке;
- Выполните проверку
Reachability
перед запросом подключения, чтобы убедиться, что есть подключение к Интернету и что хост доступен, т. Е. reachabilityWithHostName:@"wwww.mywebhostingisterrible.com"
.
В настоящее время у меня есть класс Fetcher
с синглтоном +(Fetcher *)sharedFetcher
, который используется во всех моих контроллерах представления для получения данных. В настоящее время все данные выбираются с использованием следующего кода:
- (NSString *)stringWithUrl:(NSURL *)url {
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30];
NSData *urlData;
NSURLResponse *response;
NSError *error;
urlData = [NSURLConnection sendSynchronousRequest:urlRequest
returningResponse:&response
error:&error];
return [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];
}
Метод, который выбирает, выглядит следующим образом:
-(NSArray *)fetchDogFoodListing {
NSString *urlString = [NSString stringWithFormat:@"%@query/dogFood/%@/%lli/%@/%@",self.connectionUrl,self.queryCriteria.dogFoodName,self.queryCriteria.dogFoodBrandId,self.queryCriteria.dogFoodIngredients,self.queryCriteria.dogFoodBrand];
NSString *json = [self stringWithUrl:[NSURL URLWithString:urlString]];
return [self.factory buildIKDogFoodArrayWithJSON:json];
}
и звонок с UIViewController
в -(void)viewDidLoad
выглядит так:
self.dogFoods = [[IKFetcher sharedFetcher] fetchDogFoodListing];
Я думал о внедрении делегата в этой ситуации, но я очень шаток от того, как делегирование должно работать. Я даже не уверен, куда это пойдет. Должен ли Fetcher
иметь FetcherDelegate
, который может уведомить контроллер представления о том, когда это будет сделано, чтобы пользовательский интерфейс мог обновляться? Должен ли контроллер представления иметь делегата, чтобы сборщик мог обновить представление, когда все готово?
Я уверен, что на основании моих вопросов вы можете увидеть мою неопытность с делегированием, поэтому я был бы признателен за любую помощь.