2016-11-04 1 views
0

Я использую «viewWillAppear», чтобы проверить UserDefaults.standard, если у меня есть данные по умолчанию, я хочу перенаправить на Dashboard View и выйти из Login.Swift viewWillAppear redirect

Когда я правильно вхожу в приложение, перенаправление приложения обычно, но не в viewWillAppear в случае наличия данных.

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 

    let defaults = UserDefaults.standard 
    if defaults.string(forKey: "username") != nil { 
     print("Exist") 
     print(defaults.string(forKey: "username")!) 
     let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let vc = storyboard.instantiateViewController(withIdentifier: "Dashboard") 
     self.present(vc, animated: true, completion: nil) 
    } 

} 

И я получаю эту ошибку con debug.

2016-11-04 17:44:32.130024 RHiOS[1155:278240] Warning: Attempt to present <RHiOS.MenuViewController: 0x100f0d480> on <RHiOS.ViewController: 0x100e0b880> whose view is not in the window hierarchy! 

Как я могу перенаправить на Dash в случае наличия данных? Благодарю.

ответ

0

Вы не сможете представить ничего, когда мнение еще не появилось, так что вы должны либо переместить код в viewDidAppear или предотвратить этот вид показывать в первую очередь, и перенаправить непосредственно на приборной панели от родительского контроллера представления, который отображает либо панель мониторинга, либо экран входа в систему в зависимости от того, есть ли у вас данные.

1

Вы не можете представить ViewController в viewWillAppear. Просто введите этот код в viewDidAppear, и он должен исправить вашу проблему.
Когда вид не отображается, он не находится в иерархии окон, как упомянутая ошибка. Вы также можете создать segue в своем раскадровке и вместо этого позвонить performSegue(withIdentifier:sender:).

+0

Но, как я могу сделать это до того, как перед проверкой входа вы увидите, что если UserData существует, не показывать Логин, просто покажите Личный кабинет, но если UserData пуст, вы увидите Login, нужны ли родители экземпляра aViewController? –

+0

вы не можете использовать презентации для решения этой проблемы. нормально отображать главный экран, а затем анимировать экран входа в систему, но если вы хотите этого избежать, вы можете установить window.rootViewController в AppDelegate, прежде чем что-либо даже представит пользователю – Yariv

Смежные вопросы