Swift: [NSNib _initWithNibNamed:bundle:options:] 无法加载 nibName

eli*_*lia 2 cocoa swift

我正在构建一个用于生产的 Cocoa 应用程序,当我创建一个NSViewController用于路由而不NSStoryboard实例化的应用程序时,我收到如下错误。

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[NSNib _initWithNibNamed:bundle:options:] could not load the nibName: ContentFully.AnotherController in bundle (null).
Run Code Online (Sandbox Code Playgroud)

实际上,我通过使用NSViewController添加解决了我的问题NSStoryboard,但我想了解当我以编程方式调用它时发生了什么以及为什么崩溃?

工作场景

let storyboard = NSStoryboard(name: "Dashboard", bundle: nil)
let vc = storyboard.instantiateInitialController() as! AnotherController
Run Code Online (Sandbox Code Playgroud)

崩溃场景

let vc = AnotherController()
self.view.window?.contentViewController = vc
Run Code Online (Sandbox Code Playgroud)

即使我完全以编程方式创建一个类并且与NSStoryboard它无关,当我更改contentViewController. NSBundle是否需要搜索每个控制器Swift

提前致谢

Phi*_*lls 7

一个非常简单的工作版本是:

import Cocoa

class AnotherController: NSViewController {

    override func loadView() {
        view = NSView(frame: NSMakeRect(0.0, 0.0, 400.0, 270.0))
        let label = NSTextField(labelWithString: "Another Controller")
        view.addSubview(label)
    }
    
}
Run Code Online (Sandbox Code Playgroud)

我可以使用您所说的崩溃代码从我的第一个控制器调用它并获得预期结果。

@IBAction func replaceMe(_ sender: Any) {
    let vc = AnotherController()
    self.view.window?.contentViewController = vc
}
Run Code Online (Sandbox Code Playgroud)