NSViewController带有/不带有笔尖

时间:2018-07-28 08:01:23

标签: appkit nsviewcontroller

我正在将NSViewController子类添加到库中,并尝试吃蛋糕。

  

MyViewController()(或init())的默认实现   引发异常

如果无法在笔尖或情节提要中找到自己。为了克服这个问题,我必须override loadView()并在代码中创建并分配一个视图。我真正想要做的是在代码中创建视图,但是只有在超级实现在笔尖找不到一个的情况下,才运行该代码。我尝试过

    do  {
        super.loadView()
        }
    catch{
        //viewCreatingCode
        } 

但是很遗憾,loadView并未标记为抛出,因此捕获无法正常工作。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

好的,这就是你要做的。

NSViewController具有三个要检查的属性:nibBundlenibNamestoryboard。这三个属性都是可选的,它们是在调用loadView之前设置的。

loadView的默认实现检查是否设置了这些属性。如果是这样,它将从该笔尖或情节提要中初始化视图。否则,它将创建一个空的NSView

loadView的实现中,您还要检查这些值。如果nibNamestoryboard均为nil,则可以根据需要创建和设置视图。

override func loadView() {
    guard nibName == nil, storyboard == nil else {
        super.loadView()
        return
    }
    view = MyCustomView()
}