GCD NSURLSession extensionHandler block возвращаемое значение null

У меня есть представление с метками, эти метки будут иметь новое значение, когда в viewdidload внутри viewdidload есть вызовы для 2 методов. Первый вызовет метод из другого класса, этот метод будет иметь NSURLSessionDataTask который будет иметь completionHandler блок. Я хочу установить новое значение для этих ярлыков из сеанса NSHTTPURLResponse как объект словаря. Проблема в том, что когда представление действительно загружало значение для меток, оно равно нулю. Я знаю, это потому, что представление вызывает метод до того, как завершится первый, который является блоком!

я не знаю, как закончить первый метод, а затем вызвать второй.

Я пытался сделать это

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ // 1
[AnotherClass method:argu anotherArgu:argue2]; // calling the method from the otherclass, this method have completionHandler block
_curentObj = [AnotherClass currentObje]; 
dispatch_async(dispatch_get_main_queue(), ^{ // 2
[self setupUserLabel]; // 3 this method will set the new value for the label from _currentObj but it's null
});
});

Я не знаю, как заставить его закончить первый звонок, который [AnotherClass method:argu anotherArgu:argue2]; а затем после окончания и завершения вызовите другой в viewdidload. Пожалуйста, помогите Спасибо

1 ответ

Решение

Вы должны изменить свое мышление. Ваши результаты, вероятно, не будут доступны в viewDidLoad. Вместо этого вы запускаете NSURLSessionDataTask и в обработчике завершения получаете нужные результаты, форматируете их по своему желанию, а затем вносите изменения в свой пользовательский интерфейс при вызове dispatch_async(dispatch_get_main_queue()) внутри блока завершения.

Блок завершения вызывается в фоновом потоке, выполняет подготовительную работу и затем использует dispatch_async для вызова кода для установки новых данных в пользовательский интерфейс в основном потоке.

Другие вопросы по тегам