Приложение iOS закрывается из-за медленного подключения к сети

Я работаю над приложением iOS быстро. Мне нужно проанализировать два веб-API (XML) во время запуска приложения, и в этот период мне нужно показать экран запуска. Поэтому я отправил синхронный запрос на анализ данных с сервера. Если сетевое соединение хорошее, то приложение работает нормально, но из-за медленного сетевого соединения или загрузки данных с сервера требуется более 20 секунд, оно может закрыться автоматически. Как решить эту проблему. Пожалуйста, предложите это.


person Vipulk617    schedule 02.12.2015    source источник
comment
Используйте асинхронный запрос. // Ваше приложение завершает работу, потому что синхронный запрос блокирует основной поток, и если он выполняется слишком долго, iOS убивает приложение.   -  person Eric Aya    schedule 02.12.2015
comment
Просто вызовите свой API в didFinishLaunchingWithOptions приложения в appdelegate.   -  person Saqib Omer    schedule 02.12.2015
comment
Любой другой вариант отображения экрана запуска с асинхронным запросом.   -  person Vipulk617    schedule 02.12.2015
comment
Я уже разобрал данные в didFinishLaunchingWithOptions   -  person Vipulk617    schedule 02.12.2015
comment
Вы можете добавить функции задержки, такие как sleep(20.0), в didFinishLaunchingWithOptions. Но это не лучший способ сделать это. Если вы вызываете асинхронный метод, вы должны сделать это правильно, попытавшись поймать и перезагрузить представление, как только вызов API вернет данные.   -  person Saqib Omer    schedule 02.12.2015
comment
@vipulk617 Нет, sleep будет блокировать только основной поток на определенное время, тем самым также блокируя ваше соединение и ваше приложение. Никогда не используйте это, чтобы попытаться задержать результат.   -  person Eric Aya    schedule 02.12.2015
comment
проголосовали против - 1000-й раз обсуждалось на SO и действительно плохая идея   -  person Daij-Djan    schedule 02.12.2015
comment
Используйте правильный асинхронный запрос. Фреймворк какао здесь весьма полезен. НЕ используйте вызовы sleep().   -  person Hermann Klecker    schedule 02.12.2015
comment
@Eric D за помощь.   -  person Vipulk617    schedule 02.12.2015
comment
См. этот ответ: stackoverflow.com/questions/24176362/   -  person Hermann Klecker    schedule 02.12.2015
comment
@HermannKlecker спасибо, что уделили мне драгоценное время.   -  person Vipulk617    schedule 02.12.2015
comment
@SaqibOmer НЕТ - НИКОГДА не спите в основном потоке.   -  person rmaddy    schedule 02.12.2015


Ответы (1)


Вы никогда не должны отправлять синхронные запросы в основной поток!

Добавить новый VC при загрузке. Там вы можете загрузить свои данные асинхронно. Когда данные будут готовы, передайте их следующему VC.

person Timur Bernikovich    schedule 02.12.2015