2015-09-06 35 views
1

从一个空白的OS X应用程序项目开始,我将下面的代码添加到applicationDidFinishLaunchingNSApplication keyWindow在applicationDidFinishLaunching期间为零

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

发射时我打的错误情况,因为我的本地window变量是零。但是,当我显示应用变量的内容时,我看到_keyWindow的有效值。还要注意,在堆栈转储旁边的屏幕上显示空白的GUI窗口。

enter image description here

为什么在这种情况下,keyWindow: NSWindow?财产收益为零? 感谢

回答

1

NSApplicationkeyWindow属性为nil每当应用程序是不活跃的,因为没有窗口集中键盘事件。当它启动完成后,用户可能已经激活了一些其他应用程序,并且Cocoa被设计为不会窃取焦点,因此您不能依赖它在启动完成时处于活动状态。

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

您所看到的应用程序的_keyWindow实例变量当然是一个实现细节。人们不能确定它表示什么,你绝对不应该依赖它。不过,我相信它基本上是应用程序的“潜在”关键窗口。这是当应用程序被激活时再次关键的窗口(除非它通过点击其另一个窗口来激活)。

+1

我直接从Finder启动测试应用程序而没有崩溃。我在控制台日志中确认没有问题,所以这确实是从XCode中运行的工件。 –

相关问题