在我的Swift代码中,我试图像下面那样实例化一个Objective-C视图控制器,但是没有调用viewDidLoad
方法。
let detailMessageVC = DetailMessageViewController(nibName:nil, bundle:nil)
如果我像Objective-C代码那样实例化相同的viewcontroller 它确实被称为。视图控制器没有xib。
self.detailMVC = [[DetailMessageViewController alloc] init];
有谁知道为什么会这样?我希望在从Swift调用时具有相同的行为,因为我依靠viewDidLoad
来执行各种初始化。这是使用Xcode 6.3.2
答案 0 :(得分:1)
如评论所述,视图控制器的初始化与其viewDidLoad
回调之间没有联系。
您甚至可以在初始化之前调用viewDidLoad
。因为如果ViewController有效地加载了视图,则会调用viewDidLoad
。
检查那里:https://stackoverflow.com/a/4862772/1486230
虽然,我不会依赖viewDidLoad
,除非你知道你将有效地展示你的ViewController;主要是使用myVC.view
。
想想初始化一个ViewController(它只是一个逻辑对象)与创建它的视图不同。出于性能原因,如果不需要,iOS不会创建图形对象。如果你在Swift和Objective-C之间有所不同,那么更多因为Swift在优化方面可能更好。但这种行为很正常。
答案 1 :(得分:0)
对于iOS 9+,您可以拨打vc.loadViewIfNeeded()
。