【问题标题】:awakeFromNib vs Outlets - Do the outlets and segues set when we call awakeFromNibawakeFromNib vs Outlets - 当我们调用 awakeFromNib 时设置 outlet 和 segues
【发布时间】:2016-05-12 23:38:32
【问题描述】:

我试图了解视图控制器的生命周期,但我已经阅读了一些关于 awakeFromNib 的相互矛盾的陈述。文档说所有网点都应该设置在awakeFromNibI see that it's not always trueawakeFromNibprepareForSegue 之间的通话顺序是什么?何时开通?

【问题讨论】:

  • 在 UIView 生命周期中使用awakeFromNib 更为常见。但是您要查找的顺序是prepareForSegueawakeFromNibviewDidLoad 您可以在 awakeFromNib 中访问插座,但您应该阅读需要首先尝试访问视图控制器的视图的警告。另一个问题的发帖人正在感叹所谓的“黑客”。在viewDidLoad中设置视图控制器更安全、更标准。
  • 谢谢!因此,如果我们需要完全初始化的视图和插座,我们会使用 [self view] 开始 awakeFromNib
  • 那是objective-c。在 swift 中,您可以说类似 print(self.view) 的内容,这有点荒谬,这也是我推荐使用 viewDidLoad 的原因。

标签: ios swift uiviewcontroller lifecycle awakefromnib


【解决方案1】:

您的视图控制器及其视图层次结构在运行时从单独的 nib 文件加载。在加载视图层次结构之前,不会连接到视图层次结构的出口,这发生在加载视图控制器之后。 (我已经更深入地解释了这一点in this answer。)

假设您在导航控制器中有一个“主”视图控制器。主视图控制器执行 segue 以推送“详细”视图控制器。以下是事件的顺序:

  1. 从其 nib 加载详细视图控制器。如果情节提要场景包含其他顶级对象,也会加载这些对象。

  2. 细节视图控制器接收awakeFromNib:细节视图控制器到场景中其他顶级对象的出口已连接,但视图层次结构的出口没有。

  3. 主视图控制器接收prepareForSegue,segue 指向详细视图控制器。

  4. Segue 要求导航控制器推送详细视图控制器。

  5. 导航控制器向详细视图控制器询问其视图,以添加到导航控制器的视图层次结构中。

  6. 详细视图控制器加载其视图层次结构 nib。这会将详细视图控制器的出口连接到其视图层次结构。

  7. 视图层次结构中的所有对象都接收awakeFromNib

  8. 详细视图控制器接收viewDidLoad

【讨论】:

    猜你喜欢
    • 2011-09-12
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多