使用Storyboard参考AppDelegate中的主要NSWindow?

Cha*_*lie 7 xcode cocoa interface-builder swift

我正在尝试在App Delegate中为我的应用程序的主窗口设置一个插座,然后在Interface Builder中连接它.我轻松地在App Delegate中创建插座:

@IBOutlet weak var mainWindow: NSWindow!
Run Code Online (Sandbox Code Playgroud)

但是,在界面构建器中,我无法将引用插座连接到App Delegate.相反,我只能将它连接到Window Controller,我希望这张照片显示:

在此输入图像描述

第一个对象是Window Controller,第二个对象是First Responder,但缺少App Delegate对象.菜单栏有App Delegate对象:

在此输入图像描述

我可以将任何东西从菜单栏连接到App Delegate中的任何商店.

我想我可以使用以下方法访问窗口对象:

NSApp.windows[0]
Run Code Online (Sandbox Code Playgroud)

但这似乎容易出错,特别是如果我有一个以上的窗口.

Kau*_*eya 6

我不知道这是否是正确的做法,但这将解决您的问题.

Decalre在AppDelegate的NSWindow房产

weak var window: NSWindow!
Run Code Online (Sandbox Code Playgroud)

并在类似NSWindowController的windowWillLoad中 设置属性

(NSApplication.sharedApplication().delegate as! AppDelegate).window = self.window
Run Code Online (Sandbox Code Playgroud)

您必须子类化NSWindowController才能定义windowWillLoad