Swift viewWillAppear重定向

时间:2016-11-04 23:51:18

标签: swift uiviewcontroller nsuserdefaults

我正在使用“viewWillAppear”检查UserDefaults.standard,如果我有关于默认数据的数据,我想重定向到Dashboard View并退出登录。

当我正确登录时,应用程序正常重定向,但在有数据的情况下不在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)
    }

}

我得到这个错误调试。

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?感谢。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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