我正在将NSViewController
子类添加到库中,并尝试吃蛋糕。
MyViewController()(或init())的默认实现 引发异常
如果无法在笔尖或情节提要中找到自己。为了克服这个问题,我必须override loadView()
并在代码中创建并分配一个视图。我真正想要做的是在代码中创建视图,但是只有在超级实现在笔尖找不到一个的情况下,才运行该代码。我尝试过
do {
super.loadView()
}
catch{
//viewCreatingCode
}
但是很遗憾,loadView并未标记为抛出,因此捕获无法正常工作。有什么想法吗?
答案 0 :(得分:2)
好的,这就是你要做的。
NSViewController
具有三个要检查的属性:nibBundle
,nibName
和storyboard
。这三个属性都是可选的,它们是在调用loadView
之前设置的。
loadView
的默认实现检查是否设置了这些属性。如果是这样,它将从该笔尖或情节提要中初始化视图。否则,它将创建一个空的NSView
。
在loadView
的实现中,您还要检查这些值。如果nibName
和storyboard
均为nil
,则可以根据需要创建和设置视图。
override func loadView() {
guard nibName == nil, storyboard == nil else {
super.loadView()
return
}
view = MyCustomView()
}