iOS — выполнение синхронного HTTP-запроса с помощью AFNetworking

В настоящее время я переношу свое приложение с использования ASIHTTPRequest на AFNetworking. Я знаю, что синхронных запросов следует избегать, если это возможно, но в моем приложении у меня есть только одно место, где я его использую. В методе делегата приложения applicationDidEnterBackground() мне нужно запустить HTTP-запрос для запроса данных, чтобы установить номер значка приложения, когда приложение переходит в фоновый режим. При асинхронном запуске это редко работает, потому что метод просто выпадает, и приложение приостанавливается до завершения HTTP-запроса. С ASIHTTPRequest я использовал метод [request startSynchronous], и это означало, что HTTP-запрос каждый раз выполнялся на 100%, а значок обновлялся правильно. Я вижу, что в AFNetworking нет очевидного синхронного варианта, поэтому может ли кто-нибудь предложить способ его синхронного использования или альтернативное решение?


person Jonathan Wareham    schedule 24.10.2012    source источник


Ответы (1)


Нашли способ сделать это - с помощью одного из производных AFHTTPRequestOperation есть метод - setShouldExecuteAsBackgroundTaskWithExpirationHandler: который дает операции дополнительное время для завершения до того, как ОС приостановит приложение. Итак, мой код:

[operation setShouldExecuteAsBackgroundTaskWithExpirationHandler:nil];
[operation start];

Это было как раз то, что мне было нужно, и решило мою проблему.

Джонатан

ОБНОВЛЕНИЕ. Как указал Боб, использование этого метода на самом деле не выполняет операцию синхронно, но было идеальным решением в моем случае при отсутствии синхронного метода.

person Jonathan Wareham    schedule 29.10.2012
comment
Вы запустили фоновое наземное задание. Это НЕ выполняет синхронный запрос. Поэтому я предлагаю вам отредактировать свой вопрос, чтобы уточнить. - person Bob Cromwell; 10.04.2013