Выберите RootViewController в AppDelegate после асинхронного запроса
-
21-12-2019 - |
Вопрос
Я пытаюсь объяснить мою проблему.В AppDelegate я должен выбрать rootViewController в зависимости от результата асинхронного запроса (я использую AfnetWorking Framework).На самом деле, мне нужно знать, если мой пользователь профилирован или нет: если он профилирован, я могу показать ему домой приложения, если он не должен показать ему представление о профилировании.
в раскадровке Я устанавливаю вид домой как указанную точку входа, но таким образом, этот вид всегда отображается до тех пор, пока асинхронный запрос не будет завершен.Есть ли способ сделать AppDelegate ждать ответа?
Решение
Я думаю, что не имеется хорошего решения, чтобы позволить делегату приложения ждать ответа, потому что если сетевое соединение будет плохое время загрузки приложения будет очень долго, а ОС может убить ваше приложение или пользователь может выключить его.
.Вы можете добавить некоторую загрузку контроллера просмотра (с анимацией, чтобы пользователь узнал, что приложение что-то делает) вместо дома, и когда вы получаете ответ, присутствуют подходящий вид на пользователя (модальный сайт может выполнить работу). Надеюсь, что эта помощь
Другие советы
Лучшее решение - использовать Splash Screens.То есть когда ваше приложение загружается в AppDelegate, создайте и нажимайте контроллер вид на всплеск.Что просто будет содержать один UiimageView, покрывающий целый экран, показывающий ваше изображение в брызг.После завершения асинхронного вызова высказывайте этот контроллер просмотра SPLASH и нажмите необходимый контроллер просмотра.
Многие приложения используют этот способ для загрузки необходимых асинхронных данных, прежде чем показывать приложение.Так что пользователь не видит пустые экраны или данные мусора.
Если что-то не удалось, например, сбой подключения к Интернету или ошибка отклика сервера и т. Д., Показать ошибку пользователю и выполнить обработку ошибок в соответствии с логикой приложения.
Вы можете программически перейти к контроллеру корневого просмотра, как
[self.navigationController popToRootViewControllerAnimated:YES];
.
Этот код может быть помещен в условие результата.
Или на пути, я думаю, вы созданы навигации по навигации в RootViewController.Вы можете программически выполнять Segue, используя
- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender
. Если вы используете AfnetWorking, просто добавьте метод в блоке успеха и передайте ответ на этот метод в параметре словаря.Проверьте свой ответ в методе и выберите контроллер, который вы хотите сделать, сделать контроллер Root View от этого метода.