![](/img/trans.png)
[英]ViewController from StoryBoard make ViewDidLoad called twice
[英]viewDidLoad not called when initialising obj viewcontroller from Swift
在我的 Swift 代码中,我试图实例化一个如下所示的 Objective-C 视图控制器,但是没有调用viewDidLoad
方法。
let detailMessageVC = DetailMessageViewController(nibName:nil, bundle:nil)
如果我像这样从 Objective-C 代码实例化相同的视图控制器,它确实会被调用。 视图控制器没有xib。
self.detailMVC = [[DetailMessageViewController alloc] init];
有谁知道为什么会这样? 我希望在从 Swift 调用时具有相同的行为,因为我依赖viewDidLoad
来执行各种初始化。 这是 Xcode 6.3.2
正如评论所述,视图控制器的初始化与其viewDidLoad
回调之间没有联系。
您甚至可以在 init 之前调用viewDidLoad
。 因为如果 ViewController 有效地加载了一个视图,就会调用viewDidLoad
。
检查那里: https : //stackoverflow.com/a/4862772/1486230
虽然,除非您知道将有效地显示您的 ViewController,否则我不会依赖viewDidLoad
; 主要是通过使用myVC.view
。
试想一下,初始化一个 ViewController(它只是一个逻辑对象)与创建它的视图是不同的。 出于性能原因,如果不需要,iOS 不会创建图形对象。 如果您对 Swift 和 Objective-C 有所不同,那更多是因为 Swift 在优化方面可能更好。 但行为是正常的。
对于 iOS 9+,您可以调用vc.loadViewIfNeeded()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.