У меня есть функция, которая должна ждать результата обработчика завершения возвратить BOOL, для которого значение будет установлено внутри обработчика завершения:подождать до конца обработчика завершения, чтобы вернуть BOOL?
-(BOOL) fetchFeed
{
......
NSURLSessionDataTask *dataTask =
[sharedSessionMainQueue dataTaskWithRequest:req completionHandler:
^(NSData *data, NSURLResponse *response, NSError *error){
NSMutableArray *jsonObject = [NSJSONSerialization JSONObjectWithData:data
options:0
error:nil];
dispatch_async(dispatch_get_main_queue(), ^{
if(!jsonObject)
{
UIAlertAction *ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){[self dismissViewControllerAnimated: YES completion: nil];}];
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Connection problem." message:@"Please check your internet connection and trying logging in again." preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:ok];
[self presentViewController:alert animated:YES completion:nil];
_internetFailed = YES;
}
else
{
_internetFailed = NO;
}
});
}];
[dataTask resume];
return _internetFailed;
}
Проблема в том, что сейчас _internetFailed возвращается до того конец обработчика завершения. Я попытался переместить «return _internetFailed» в обработчик завершения, но это запрещено. Вопрос: как мне структурировать это так, чтобы возврат ожидал завершения обработчика завершения?
Я осмотрелся, но не смог найти обработчик завершения в парадигме типа обработчика завершения. Какие еще существуют варианты? Спасибо заранее за любые предложения.
Вы можете использовать семафор – Andy
@ Энди спасибо, что я даже не знал, что они существуют. Посмотрим. –