`view.window`在`NSViewController-viewDidLoad`中是nil

时间:2015-10-15 05:10:09

标签: macos cocoa

我'试图在Array ( [key1] => Array ( [key2] => Array ( [key3] => Array ( [key4] => text ) ) ) ) 内访问view.window,但它没有。有没有办法强制窗口加载NSViewController-viewDidLoad

2 个答案:

答案 0 :(得分:0)

我很确定你的直接问题的答案是" no&#34 ;;你不能从-viewDidLoad内部加载窗口,你只是处于nib加载过程的中间,它就是这样。根据您的笔尖的构造方式以及AppKit的内部细节,您可能会发现窗口有时会在-viewDidLoad中加载并连接,但它不是您应该依赖的,因为它无法保证。您可能希望使用-awakeFromNib代替;在加载并初始化笔尖中的所有对象之后调用它,因此应该在该点设置窗口。

答案 1 :(得分:0)

viewDidLayout 中,你可以在这种情况下得到(或给出一个更有用的名称)窗口。例如。

你的ViewController类中的顶部

@IBOutlet var bigView: NSView!
var toplevel: NSWindow?

然后你添加

override func viewDidLayout() {

    super.viewDidLayout()

    toplevel = bigView.window
}

然后,您可以在代码中的任何其他位置查询toplevel.firstResponder并获得答案。 。

希望这有助于