什么时候必须设置视图出口?

When does a view outlet have to be set?

我已阅读其他关于如何修复 "view outlet was not set" 异常的答案,并了解如何设置文件所有者和查看出口。但是,我无法理解 when/why 引发了异常。我怎么能逃过一劫,这不是问题?

override func viewDidLoad() {
    super.viewDidLoad()

    let viewNib = UINib(nibName: "MyView", bundle: nil)
    let myView = viewNib.instantiate(withOwner: nil, options: nil).first as! MyView

    self.view = myView
}

MyViewclass是用nib初始化的,nib文件本身没有设置文件属主,也没有view outlet,还好。但其他时候,这是行不通的。我试图重现一个特定的案例,以确定何时引发和未引发异常,但无法确定它。

Alladinian's comment helped. The relevant docs 来自 loadView() 方法:

A view controller has an associated nib file if the nibName property returns a non-nil value, which occurs if the view controller was instantiated from a storyboard, if you explicitly assigned it a nib file using the init(nibName:bundle:) method, or if iOS finds a nib file in the app bundle with a name based on the view controller's class name.

例如,我制作了一个名为 'DuckView' 的笔尖和一个名为 'DuckViewController' 的视图控制器,并且 Xcode 自动将两者相关联并期望视图出口能够被设置。如果未设置视图出口,并且未覆盖 loadView(),则会引发异常。相反,如果设置了视图出口或实施了 loadView() 方法,它运行良好。