我尝试在OS X上从NSWindow
加载NSViewController
,并且我正在执行以下操作:
private lazy var discoverable: DiscoverableWindow = {
return DiscoverableWindow.instanceFromNib()
} ()
静态方法instanceFromNib()
定义如下:
class func instanceFromNib() -> DiscoverableWindow {
var instance = DiscoverableWindow()
var objects: NSArray?
NSBundle.mainBundle().loadNibNamed("DiscoverableWindow", owner: instance, topLevelObjects: &objects)
return instance
}
我正在使用该窗口显示NSViewController
:
NSApp.beginSheet(self.discoverable, modalForWindow: NSApplication.sharedApplication().mainWindow!, modalDelegate: nil, didEndSelector: nil, contextInfo: nil)
但是,当我加载它时,我看到以下内容:
我有什么不正确的事吗?为什么NSWindow
为空?我在下面阅读了以下内容:
Cocoa - loadNibNamed:owner:topLevelObjects: from loaded bundle
答案 0 :(得分:1)
为什么不制作一个窗口控制器来处理DiscoverableWindow
?
创建NSWindowController
的子类,确保选中“还为用户界面创建xib文件”。在DiscoverableWindowController
xib中配置窗口,在窗口的属性检查器上取消选中“Visible At Launch”。
然后,在ViewController
:
@IBAction func showSheet(sender: NSButton) {
let discoverableWC = DiscoverableWindowController(windowNibName: "DiscoverableWindowController")
view.window?.beginSheet(discoverableWC.window!, completionHandler: nil)
}
通常,应用中的每个窗口都应该由自己的窗口控制器管理,让窗口控制器为您处理nib加载和实例化。