繁体   English   中英

从 Swift 初始化 obj viewcontroller 时未调用 viewDidLoad

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM