在我的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
虽然,我不会依赖viewDidLoad
,除非你知道你会有效地显示你的ViewController;主要使用myVC.view
.
就像初始化一个ViewController(它只是一个逻辑对象)不同于创建它的视图。出于性能原因,iOS不会创建不需要的图形对象。如果你发现Swift和Objective-C之间存在差异,更多是因为Swift在优化方面做得更好。但行为正常
对于iOS 9+,可以调用vc.loadViewIfNeeded()