在applicationDidFinishLaunching期间,NSApplication keyWindow为nil

时间:2015-09-06 00:42:14

标签: swift cocoa nsapplication

从空白OS X应用程序项目开始,我将以下代码添加到applicationDidFinishLaunching

func applicationDidFinishLaunching(aNotification: NSNotification) {
    let app = NSApplication.sharedApplication()
    guard let window = app.keyWindow else {
        fatalError("No keyWindow\n")
    }
    print(window)
}

在发布时我遇到了错误案例,因为我的本地window变量为零。然而,当我显示app变量的内容时,我看到了_keyWindow的有效值。另请注意,空白GUI窗口正显示在堆栈转储旁边的屏幕上。

enter image description here

为什么keyWindow: NSWindow?属性在这种情况下返回nil? 感谢

1 个答案:

答案 0 :(得分:4)

每当应用程序未处于活动状态时,

NSApplication的{​​{1}}属性将为keyWindow,因为没有窗口专注于键盘事件。在完成启动时,您无法依赖它处于活动状态,因为用户可能在启动您和启动完成之间激活了一些其他应用程序,并且Cocoa旨在不会窃取焦点。

在某种程度上,您可能会发现从Xcode启动时会发生更多事情,因为在这种情况下应用激活有点奇怪。但是,您仍然不得编写nil方法来假设您的应用处于有效状态。

您在应用程序的applicationDidFinishLaunching()实例变量方面看到的内容当然是实现细节。人们不能确定它意味着什么,你绝对不应该依赖它。但是,我相信它基本上是应用程序"潜在的"关键窗口。当应用程序被激活时,它将再次成为关键窗口(除非通过单击其他窗口激活它)。