版权所有,禁止匿名转载;禁止商业使用。
相信很多人都会遇到这样的需求:
APP 打开以后,判断用户是否登录,如果未登录,就跳转到登陆页。
今天我也遇到了这个需求,发现我封装的一个 `func checkLoginStatus()` 放在 `viewDidLoad` 里调用根本没反映,Google 了一圈,得到了解决办法:
override func viewDidAppear(animated: Bool) { super.viewDidAppear(true) checkLoginStatus() }
为什么?
iOS 视图控制对象的生命周期如下:
init-初始化程序 viewDidLoad-加载视图 viewWillAppear-UIViewController对象的视图即将加入窗口时调用; viewDidApper-UIViewController对象的视图已经加入到窗口时调用; viewWillDisappear-UIViewController对象的视图即将消失、被覆盖或是隐藏时调用; viewDidDisappear-UIViewController对象的视图已经消失、被覆盖或是隐藏时调用; viewVillUnload-当内存过低时,需要释放一些不需要使用的视图时,即将释放时调用; viewDidUnload-当内存过低,释放一些不需要的视图时调用。
原因很简单:如果在 viewDidLoad 时就启动 Segue 的话,依然会被后来填充的视图覆盖,要是在视图载入完成以后的 viewDidAppear 中启动 Segue,就 OK 了!