У меня есть следующий поток ViewController (V C):
SplashScreen / запуск V C -> Логин V C (при наличии уведомления) -> SplashScreenV C -> Main V C
Я хочу избегать использования отката, потому что мне нужно будет регулярно проходить повторную аутентификацию пользователя независимо от текущего V C, и, таким образом, это довольно программно «присутствует».
Проблема в том, что я могу представить и отклонить SplashScreen V C (который изначально был root), но затем не могу сделать то же самое для Login V C без ошибки.
Код:
//in SplashScreen VC viewDidAppear
let loginVC = myStoryboard.instantiateViewController(identifier: "loginVC") as UIViewController
loginVC.modalPresentationStyle = .fullScreen
loginVC.modalTransitionStyle = .coverVertical
//dismissal?
self.dismiss(animated: true, completion: {
self.present(loginVC, animated: true, completion: nil)
})
//in loginVC selector function
let launchVC = myStoryboard.instantiateViewController(identifier: "launchVC") as UIViewController
launchVC.modalPresentationStyle = .fullScreen
launchVC.modalTransitionStyle = .coverVertical
//check for top view controller (debugging)
print("TOPVC at LoginVC: \(self.getTopVC()!)")
//handle dismissal?
self.dismiss(animated: true, completion: {
self.present(launchVC, animated: true, completion: nil)
})
ПРЕДУПРЕЖДЕНИЕ:
Warning: Attempt to present <Slidr.LaunchScreenViewController: 0x15be0ef90> on <Slidr.LoginViewController: 0x15be6b510> whose view is not in the window hierarchy!
Warning: Attempt to present <Slidr.TestingViewController: 0x15db00ac0> on <Slidr.LaunchScreenViewController: 0x15bd06960> whose view is not in the window hierarchy!
Код работает нормально, если я не отклоняю loginV C, но я хотел бы избежать контроллеров остатков со временем.
Я пытался представить сверху V C, а не 'себя', но это, похоже, ничего не меняет.
Любая помощь будет высоко ценится.