从空白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窗口正显示在堆栈转储旁边的屏幕上。
为什么keyWindow: NSWindow?
属性在这种情况下返回nil?
感谢
答案 0 :(得分:4)
NSApplication
的{{1}}属性将为keyWindow
,因为没有窗口专注于键盘事件。在完成启动时,您无法依赖它处于活动状态,因为用户可能在启动您和启动完成之间激活了一些其他应用程序,并且Cocoa旨在不会窃取焦点。
在某种程度上,您可能会发现从Xcode启动时会发生更多事情,因为在这种情况下应用激活有点奇怪。但是,您仍然不得编写nil
方法来假设您的应用处于有效状态。
您在应用程序的applicationDidFinishLaunching()
实例变量方面看到的内容当然是实现细节。人们不能确定它意味着什么,你绝对不应该依赖它。但是,我相信它基本上是应用程序"潜在的"关键窗口。当应用程序被激活时,它将再次成为关键窗口(除非通过单击其他窗口激活它)。