2016-11-04 211 views
0

我使用“viewWillAppear”来检查UserDefaults.standard,如果我有关于默认值的数据,我希望重定向到仪表板视图并传递出登录。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调试。

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! 

如果有数据,我该如何重定向到短跑?谢谢。

回答

0

当视图尚未出现时,您将无法呈现任何内容,因此您必须将代码移至viewDidAppear或者防止首先显示此视图并直接重定向到仪表板从父视图控制器提供仪表板或登录屏幕取决于您是否有数据。

1

您无法在viewWillAppear中显示ViewController。只需将此代码放在viewDidAppear中,它就能解决您的问题。
当视图不可见时,它不在窗口层次结构中,因为提到了错误。您也可以在故事板中创建一个segue,然后拨打performSegue(withIdentifier:sender:)

+0

但是,我如何才能使登录显示检查前,如果UserData存在不显示登录只显示仪表板,但如果UserData是空的显示登录,需要aViewController实例的父母? –

+0

您无法使用演示文稿解决此问题。可以显示主屏幕然后在登录屏幕上生成动画,但如果您想避免这种情况,您可以在AppDelegate中设置window.rootViewController,然后再向用户显示任何内容 – Yariv