我面临一个奇怪的情况。在我的控制器中,viewDidLoad
在init
之前呼叫。这背后有什么技术原因吗?viewDidLoad在init之前调用?
回答
否,viewDidLoad中消息总是后初始化称为。
你确定init是否被调用?有几个init方法特别适用于UIViewController,也许调用另一个init方法,而不是让你思考不同。
如果您需要了解更多信息,请贴viewDidLoad中和所有的初始化方法的代码,并告诉我们它是如何加载(即有代码)或从笔尖。
如果您的视图控制器正在从你的主nib文件加载,那么最有可能的是利用initWithCoder正在被调用初始化控制器。
当您从代码初始化UIViewController
时,使用-initWithNibName:bundle:
,而当它从XIB初始化时,XIB加载代码将调用-initWithCoder:
。其中一种,只有这两种方法中的一种会被调用,并且它们肯定会在-viewDidLoad
之前被调用。
有没有可能的方式,-viewDidLoad
可以称为第一,除非你自己调用它(你应该从来没有真正做的)。
我知道这是一个旧帖子,但我会在任何地方张贴我的观点,因为我认为它可以帮助某人。
嗯,我一直处于这种情况。我认为viewDidLoad在我的视图控制器类的init方法之前被调用。但是真正发生的事情并非如此:流程从init方法开始,但在调用[super init *]时跳转到viewDidLoad,所以我的viewDidLoad方法中的日志消息首先显示在我的自定义初始化中。
我认为就是这样。我希望这可以节省一些时间给某人。
[对不起,我的英文]
伟大的观察! – 2017-07-23 10:44:52
访问self.view
当init
方法内(自self.view
应该还没有被从笔尖加载的过程似乎被固定,因此不会返回该viewDidLoad
方法被调用零)。
非常感谢。 init中的self.view是我的大问题。 – 2013-08-31 10:06:46
谢谢,将任何self.view活动移至viewDidLoad,并将我在指定初始化程序中需要的所有属性从self.property更改为_property。解决了一切。 – Jonauz 2013-12-15 12:53:54
最近的评论,我遇到了同样的问题,但我很困惑如何?它只是绕过构造函数? – 2015-10-14 18:35:18
我不知道什么样的viewController造成这个给你,但我遇到过类似的情况下使用的UITabBarController。 我认为这可能有助于另一个面对它与UITabBarController。
正如我所知的所有viewController在viewDidLoad之前调用init,除了UITabBarController及其子类。
作为安德鲁要求here,UITabBarControllers调用的loadView内[super init]
方法,这会导致呼叫viewDidLoad中。所以viewDidLoad方法将在init完成之前调用。
如果你在viewDidLoad中设置了一些东西,你可能应该在调用[super init]
之后在init方法内完成。
- 1. 在initWithNibName之前调用ViewDidLoad?
- 2. viewDidLoad在applicationDidFinishLaunching之前调用
- 3. viewDidLoad在IBAction之前调用?
- 4. viewDidLoad可以在viewController的'init'完全执行之前调用吗?
- 5. 在init中调用init,在self = [super init]之前调用
- 6. ViewController之前被调用的自定义init方法viewDidLoad
- 7. viewDidLoad在prepareForSegue完成之前调用
- 8. viewDidLoad在构造函数之前调用
- 9. viewDidLoad()在prepareForSegue()之前调用完成:Swift
- 10. segue.destinationViewController在prepareForSegue()之前调用两次viewDidLoad()
- 11. viewDidLoad在didSelectRowAtIndexPath之前被调用
- 12. viewDidLoad在initWithFrame之前被调用?
- 13. UITableView方法被调用之前ViewDidLoad
- 14. iPhone:viewWillAppear之前在viewDidLoad之后调用了什么?
- 15. 在调用super之前/之后放置代码viewDidLoad和viewWillAppear
- 16. TableView didSelectRowAtIndexPath在ViewDidLoad之前
- 17. application:didFinishLaunchingWithOptions在viewDidLoad之前加载
- 18. init和initWithNibName不会调用,但viewDidLoad被调用
- 19. 在初始化方法完成之前调用UIViewController viewDidLoad
- 20. iOS - viewDidLoad在didFinishLaunchingWithOptions委托之前被调用?
- 21. 为什么viewDidLoad在viewWillAppear之前被调用?
- 22. 为什么iOS6在viewdidload之前调用私有方法?
- 23. prepareForSegue在ViewDidload之前调用容器视图的VC
- 24. 在viewDidLoad之前调用UITableView委托方法
- 25. 访问属性之前viewDidLoad
- 26. 在init中设置的属性在viewDidLoad之后是否正确?
- 27. iOs 5,initWithDecoder在我的自定义init之前被调用
- 28. 如何在AngularJS中调用ng-init之前执行JS函数?
- 29. tableView cellForRowAtIndexPath:在ViewDidLoad之前运行?
- 30. 什么在viewDidLoad之前运行?
是的,init正在调用,但在viewDidLoad之后。对于那个特定的UIViewController只是alloc和init。并将该控制器作为视图控制器设置为UITabBarController并显示tabbarController?这里有什么不对吗? – 2010-07-02 13:46:37
Init在viewDidLoad之前运行,除非你真的很糟糕,这是不太可能的。你错过了另一个初始化或者得出错误的结论。是什么让你认为init在viewDidLoad之后被调用?你有没有检查过这是同一个对象?再次,没有代码 - 无法检查。 – Eiko 2010-07-02 13:57:22