当 viewDidLoad
被调用时, View 应该被加载。
但我总是在 UIApplication.sharedApplication().keyWindow
为 nil 时崩溃...
我应该把我的代码放在哪里,以便在加载 View 后调用它,而不是每次用户返回时调用它(出于这个原因,我已经排除了 viewWillAppear)?
最佳答案
情况 1: - 在 App 的委托(delegate)中手动创建 UIWindow
在将其设置为键之前,您可能以某种方式将 UIViewController
添加到 UIWindow
中。
您应该在创建窗口后在应用的委托(delegate)中调用 window.makeKeyAndVisible()
。
情况 2: - 自动 Storyboard实例化
系统读取您的 Storyboard,初始化 Root View Controller ,通过调用 viewDidLoad
和 viewWillAppear
进行准备,将其添加到窗口并显示窗口。
发生的事情是系统不能只是将窗口设置在前面并将 View Controller 动画化到它上面,因为它是第一个 View Controller 并且您不是推/弹出导航 Controller 。 viewDidLoad
可能需要一些时间...因此 Default.png
会同时显示,直到 View Controller 准备就绪。
然后在它实际出现时调用 viewDidAppear
。所以这就是您应该能够访问keyWindow
情况三:
您处于一种奇怪的情况,您有窗口,但目前没有一个是“关键”窗口,但您迫切需要访问该窗口。
调用UIApplication.sharedApplication().windows
,看是否不为空,取第一个元素。 UIApplication.sharedApplication().delegate?.window
也可能有一个值,但通常只有当窗口已经是 key 时才会有。
关于ios - 如何正确处理 nil UIApplication.sharedApplication().keyWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31324660/