我尝试从Storyboard自定义实例化窗口控制器时,感觉像是遇到了一个bug。我正在使用NSStoryboard.instantiateController(identifier:creator:)
,这是MacOS 10.15的新功能。有问题的代码块如下:
let mainWC = storyboard.instantiateController(identifier: "id") { aDecoder in
MainWindowController(coder: aDecoder)
}
我已经成功地使用了基本上完全相同的代码来自定义实例化主视图控制器,然后将该视图分配给一个新窗口和一个新的窗口控制器。那很好用。我也可以通过instantiateController(identifier:)
老式方法实例化窗口控制器而不是自定义初始化。但是,当我尝试上面的代码来自定义实例化窗口控制器时,就会出现以下错误:
-[NSClassSwapper _createControllerForCreator:coder:]
中的断言失败...自定义实例化的控制器必须调用-[super initWithCoder:]
请注意,我的自定义视图控制器类(可行)和我的自定义窗口控制器类MainWindowController
(无效)都实现了微不足道的初始化程序:
required init?(coder: NSCoder) {
super.init(coder: coder)
}
我知道这个功能是从10.15版本的操作系统开始新增的,但是文档中写到它应该适用于window controllers和view controllers,而且错误信息对我来说毫无意义。
NSStoryboard.instantiateController(identifier:creator:)
、NSStoryboard.instantiateController(identifier:)
还是NSStoryboard.instantiateInitialController(creator:)
? - WillekeNSStoryboard.instantiateInitialController(creator:)
的文档。 - Willeke