如何正确处理一个无UIApplication.sharedApplication().keyWindow
当viewDidLoad
被调用时,视图应该被加载。
但是我总是在UIApplication.sharedApplication().keyWindow
崩溃UIApplication.sharedApplication().keyWindow
是零…
我应该把我的代码放在视图被加载时调用它,而不是每次用户回来(我已经排除viewWillAppear出于这个原因)?
情况1: – 在应用程序委托中创build手动UIWindow
您可能以某种方式将UIViewController
添加到UIWindow
然后再将其设置为键。
创build窗口后,应该在应用程序的委托中调用window.makeKeyAndVisible()
。
情况2: – 自动故事板实例化
系统读取故事板,初始化根视图控制器,通过调用viewDidLoad
和viewWillAppear
准备它,将其添加到窗口并显示窗口。
会发生什么事是系统不能把窗口设置在前面,并将视图控制器设置到它上面,因为它是第一个视图控制器,而不是导航控制器的推入/popup。 而viewDidLoad
可能需要一些时间…所以Default.png
正在显示,直到视图控制器准备就绪。
然后它调用viewDidAppear
,当它实际出现时。 所以这就是你应该能够访问keyWindow
情况3:
你有一个奇怪的情况,你有窗户,但他们当前都不是“钥匙”窗口,但是你迫切需要访问窗口。
调用UIApplication.sharedApplication().windows
,看看它是不是空的,并采取第一个元素。 UIApplication.sharedApplication().delegate?.window
也可能有一个值,但通常只有当该窗口已经是密钥的时候 。
尝试使用应用程序委托的window
属性:
UIApplication.sharedApplication().delegate!.window