【问题标题】:When does a view outlet have to be set?何时必须设置视图插座?
【发布时间】:2017-12-04 16:34:40
【问题描述】:

我已阅读有关如何修复“未设置查看出口”异常的其他答案,并了解如何设置文件所有者和查看出口。但是,我不明白何时/为什么会引发该异常。我怎么能侥幸逃脱,而且这不是问题?

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
}

MyView类是用nib初始化的,nib文件本身没有文件所有者集,也没有view outlet,没问题。但其他时候,这不起作用。我试图重现一个特定情况,以确定何时引发和未引发异常,但无法确定它。

【问题讨论】:

  • 如果您想手动加载视图并将其分配为控制器的view,您可以覆盖 loadView()。 See the docs 了解有关故事板与手动控制器实例化的一些说明

标签: ios interface-builder xib


【解决方案1】:

Alladinian 的评论有帮助。相关的docs来自loadView()方法:

如果 nibName 属性返回非 nil 值,则视图控制器具有关联的 nib 文件,如果视图控制器是从情节提要中实例化的,如果您使用 init(nibName:bundle: ) 方法,或者如果 iOS 在应用程序包中找到一个名称基于视图控制器的类名的 nib 文件。

例如,我创建了一个名为“DuckView”的 nib,以及一个名为“DuckViewController”的视图控制器,Xcode 自动将两者关联起来,并期望设置视图出口。如果未设置视图出口,并且 loadView() 未被覆盖,则会引发异常。相反,如果设置了视图出口或实现了loadView() 方法,它运行良好。

【讨论】:

    猜你喜欢
    • 2015-02-10
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多