iOS-present控制器提示警告解决办法

来源:互联网 发布:炒股软件免费版排名 编辑:程序博客网 时间:2024/06/04 19:18

背景

有时候,我们想在根控制器里面present一个新的控制器,或者遇到这么一个需求:程序启动,把主页(UITabbarController)设为根控制器,判断是否免登陆,没有免登陆的情况下弹出登录界面。一般来说,都是在跟控制器present一个登陆界面控制器出来,登陆成功就dismiss掉就好了。这里面,你坑定会掉到坑里面去,因为你可能会遇到:Warning: Attempt to present on whose view is not in the window hierarchy!这种警告。


警告分析:

为什么Xcode会报这样的错误呢?

因为我们当前的控制器的view视图还没有创建好,你就去present一个新的新的控制器。就会报这样的警告错误。


解决办法:

  1. 把要present的控制器设置为根控制器。
    [UIApplication sharedApplication].delegate.window.rootViewController = 新的控制器;
    但是,不建议用这种方法。现在又把根控制器改变了,那之前那个控制器怎么办?建议当前控制器,用完就能消失掉最好。类似我说的,present一个控制器,就要dismiss掉这个控制器,回到原来的控制器。
    还是要看个人怎么设计控制器之间的连接吧。

  2. 你要present一个控制器,必须要在当前控制器的视图加载完成之后才能present。当然是在viewDidload之后啦,可以再viewWillApear,或者viewDidApear里面作判断什么时候present。程序启动流程不清楚的,看看这个UIViewController的生命周期。
    会报错,多半是在didFinishLaunchingWithOptions或者在viewDidload里面就present了。
原创粉丝点击