Swift: [NSNib _initWithNibNamed:bundle:options:] 无法加载 nibName
Swift: [NSNib _initWithNibNamed:bundle:options:] could not load the nibName
我正在构建一个用于生产的 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).
实际上我通过使用 NSViewController
添加 NSStoryboard
解决了我的问题,但我想了解当我以编程方式调用它时发生了什么以及为什么会崩溃?
Working scenario
let storyboard = NSStoryboard(name: "Dashboard", bundle: nil)
let vc = storyboard.instantiateInitialController() as! AnotherController
Crashed scenario
let vc = AnotherController()
self.view.window?.contentViewController = vc
即使我完全以编程方式创建了一个 class 并且与 NSStoryboard
没有关系,但当我更改 contentViewController
时我无法使用它。是否有必要在 NSBundle
中的每个控制器中搜索 Swift
?
提前致谢
一个非常简单的工作版本是:
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)
}
}
我可以使用您所说的崩溃代码从我的第一个控制器调用它并获得预期结果。
@IBAction func replaceMe(_ sender: Any) {
let vc = AnotherController()
self.view.window?.contentViewController = vc
}
我正在构建一个用于生产的 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).
实际上我通过使用 NSViewController
添加 NSStoryboard
解决了我的问题,但我想了解当我以编程方式调用它时发生了什么以及为什么会崩溃?
Working scenario
let storyboard = NSStoryboard(name: "Dashboard", bundle: nil)
let vc = storyboard.instantiateInitialController() as! AnotherController
Crashed scenario
let vc = AnotherController()
self.view.window?.contentViewController = vc
即使我完全以编程方式创建了一个 class 并且与 NSStoryboard
没有关系,但当我更改 contentViewController
时我无法使用它。是否有必要在 NSBundle
中的每个控制器中搜索 Swift
?
提前致谢
一个非常简单的工作版本是:
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)
}
}
我可以使用您所说的崩溃代码从我的第一个控制器调用它并获得预期结果。
@IBAction func replaceMe(_ sender: Any) {
let vc = AnotherController()
self.view.window?.contentViewController = vc
}