2010-07-02 86 views

回答

0

否,viewDidLoad中消息总是后初始化称为

你确定init是否被调用?有几个init方法特别适用于UIViewController,也许调用另一个init方法,而不是让你思考不同。

如果您需要了解更多信息,请贴viewDidLoad中和所有的初始化方法的代码,并告诉我们它是如何加载(即有代码)或从笔尖。

+1

是的,init正在调用,但在viewDidLoad之后。对于那个特定的UIViewController只是alloc和init。并将该控制器作为视图控制器设置为UITabBarController并显示tabbarController?这里有什么不对吗? – 2010-07-02 13:46:37

+0

Init在viewDidLoad之前运行,除非你真的很糟糕,这是不太可能的。你错过了另一个初始化或者得出错误的结论。是什么让你认为init在viewDidLoad之后被调用?你有没有检查过这是同一个对象?再次,没有代码 - 无法检查。 – Eiko 2010-07-02 13:57:22

0

如果您的视图控制器正在从你的主nib文件加载,那么最有可能的是利用initWithCoder正在被调用初始化控制器。

3

当您从代码初始化UIViewController时,使用-initWithNibName:bundle:,而当它从XIB初始化时,XIB加载代码将调用-initWithCoder:。其中一种,只有这两种方法中的一种会被调用,并且它们肯定会在-viewDidLoad之前被调用。

有没有可能的方式,-viewDidLoad可以称为第一,除非你自己调用它(你应该从来没有真正做的)。

11

我知道这是一个旧帖子,但我会在任何地方张贴我的观点,因为我认为它可以帮助某人。

嗯,我一直处于这种情况。我认为viewDidLoad在我的视图控制器类的init方法之前被调用。但是真正发生的事情并非如此:流程从init方法开始,但在调用[super init *]时跳转到viewDidLoad,所以我的viewDidLoad方法中的日志消息首先显示在我的自定义初始化中。

我认为就是这样。我希望这可以节省一些时间给某人。

[对不起,我的英文]

+0

伟大的观察! – 2017-07-23 10:44:52

34

访问self.viewinit方法内(自self.view应该还没有被从笔尖加载的过程似乎被固定,因此不会返回该viewDidLoad方法被调用零)。

+4

非常感谢。 init中的self.view是我的大问题。 – 2013-08-31 10:06:46

+1

谢谢,将任何self.view活动移至viewDidLoad,并将我在指定初始化程序中需要的所有属性从self.property更改为_property。解决了一切。 – Jonauz 2013-12-15 12:53:54

+0

最近的评论,我遇到了同样的问题,但我很困惑如何?它只是绕过构造函数? – 2015-10-14 18:35:18

3

我不知道什么样的viewController造成这个给你,但我遇到过类似的情况下使用的UITabBarController。 我认为这可能有助于另一个面对它与UITabBarController。
正如我所知的所有viewController在viewDidLoad之前调用init,除了UITabBarController及其子类。
作为安德鲁要求here,UITabBarControllers调用的loadView内[super init]方法,这会导致呼叫viewDidLoad中。所以viewDidLoad方法将在init完成之前调用。
如果你在viewDidLoad中设置了一些东西,你可能应该在调用[super init]之后在init方法内完成。

相关问题