Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从Swift初始化obj viewcontroller时未调用viewDidLoad_Ios_Objective C_Swift - Fatal编程技术网

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

Ios 从Swift初始化obj viewcontroller时未调用viewDidLoad,ios,objective-c,swift,Ios,Objective C,Swift,在我的Swift代码中,我试图实例化如下所示的Objective-C视图控制器,但是没有调用viewDidLoad方法 let detailMessageVC = DetailMessageViewController(nibName:nil, bundle:nil) 如果我从Objective-C代码中实例化相同的viewcontroller,如下所示 确实有人打电话给它。视图控制器没有xib self.detailMVC = [[DetailMessageViewController al

在我的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中,正如注释所述,视图控制器的初始化和它的
viewdiload
回调之间没有联系

您甚至可以在init之前调用
viewDidLoad
。因为如果ViewController有效加载了视图,则会调用
viewDidLoad

检查那里:

尽管如此,我不会依赖于
viewDidLoad
,除非您知道您将有效地显示ViewController;主要通过使用
myVC.view


就像初始化ViewController(它只是一个逻辑对象)不同于创建它的视图一样。出于性能原因,如果不需要图形对象,iOS将不会创建图形对象。如果你得到了Swift和Objective-C之间的区别,那是因为Swift在优化方面可能更好。但是这种行为是正常的。

对于iOS 9+您可以调用
vc.loadViewIfNeeded()

我看不到您演示视图控制器。它是否显示?
viewDidLoad
不应该为这两行中的任何一行调用<第一次访问视图控制器的
view
属性时,将调用code>viewDidLoad。仅通过实例化视图控制器通常不会发生这种情况。通常在第一次尝试显示视图控制器时发生;然后viewDidLoad将不会自动调用,您需要调用[self.detilVc loadView]您可能不想单独调用loadView,这可能会导致递归循环内存泄漏,其中viewDidLoad未被调用,如果确实需要,您可能只想这样做,但我看不出真正需要这样做的情况:YOURViewController*so=[[YOURViewController alloc]init];UIView*what=so.view;这将导致视图被预加载,并将ViewDidLoad称为wll以防止副作用,但我同样不认为您为什么要这么做often@C_X切勿直接调用
loadView
。文档甚至会告诉你这一点。这种行为是正常的,但有时你需要告诉UIKit加载视图,如果没有这样做的话。主要是在使用Xib时。这是通过调用vc.loadViewIfRequired()完成的