2016-11-04 41 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