NSApp的keyWindow何时创建?

时间:2011-07-11 02:49:53

标签: cocoa osx-snow-leopard

什么时候创建keyWindow?

我认为NSWindow会在调用相应的视图控制器的updateView方法之前创建(我调用它来响应awakeFromNib),但是如果我使用NSApp的keyWindow创建一个警告表,它就不能正确显示。

但是,如果我在该视图上放置一个按钮,然后在用户点击它时调出警告,则会定义keyWindow,并且警报会正确显示(如预期的那样)。

我的应用程序代表几乎完全是空的。

我实际上并不想在启动时显示警报,但我确实想知道何时设置了关键窗口。 :)

1 个答案:

答案 0 :(得分:4)

  

什么时候创建keyWindow?

-[NSApp keyWindow]指向现有窗口(例如,已从nib文件加载的窗口),该窗口当前是关键窗口,通常是通过发送-makeKeyAndOrderFront:

当应用程序启动时,Cocoa:

  1. 加载主nib文件;
  2. 取消归档nib文件的内容并实例化其对象;
  3. 重新建立nib文件中定义的连接;
  4. -awakeFromNib发送到nib文件对象的(子集);
  5. 显示在启动时标记为可见的窗口;
  6. Resource Programming Guide

    中所述

    如果nib文件包含单个窗口,则该窗口在显示时会成为键,只要它可以成为关键窗口,并且 -awakeFromNib发送后会发生

    此外,the documentation for -[NSApplication keyWindow]声明:

      

    如果应用程序的nib文件尚未完成加载或接收方未处于活动状态,则此方法可能会返回nil