2016-05-10 29 views
0

我想了解一个视图控制器的生命周期,我已经读了几条关于awakeFromNib的矛盾声明。该文件说,所有网点应设置在awakeFromNib,但I see that it's not always trueawakeFromNib,prepareForSegue之间的电话订单是什么时间?awakeFromNib vs Outlets - 当我们调用awakeFromNib时设置插座和segues

+0

在UIView生命周期中使用'awakeFromNib'更常见。但是您要查找的顺序是'prepareForSegue','awakeFromNib','viewDidLoad'您可以访问awakeFromNib中的插座,但是您应该先阅读需要首先尝试访问视图控制器视图的警告。所谓的“破解”另一个问题的海报就是感叹。在'viewDidLoad'中设置视图控制器更安全,更标准。 – beyowulf

+0

谢谢!所以如果我们需要完全初始化的视图和插座,我们用[self view]开始awakeFromNib –

+0

这就是objective-c。在swift中,你可以说'print(self.view)',这有点荒谬,这也是我推荐使用'viewDidLoad'的原因。 – beyowulf

回答

0

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

假设你在导航控制器中有一个“主”视图控制器。主视图控制器执行segue来推动“详细”视图控制器。这里是事件的顺序:

  1. 细节视图控制器从它的笔尖加载。如果故事板场景包含其他顶级对象,则这些对象也将被加载。

  2. 详细视图控制器接收到awakeFromNib:详细视图控制器的插座连接到场景中的其他顶层对象,但是视图层次结构的插座不是。

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

  4. 塞格要求导航控制器推动详细视图控制器。

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

  6. 细节视图控制器加载其视图层次结构的笔尖。这将详细视图控制器的插座连接到其视图层次结构。

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

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