未调用UIViewController的loadView

L. *_*ner 5 iphone uiviewcontroller uiview ios

我想以编程方式在NavigationController中设置UIViewController,但是调用loadView和viewDidLoad方法.

这是我在app delegate中的代码:

MyViewController *viewController = [[MyViewController alloc] init];
UIView *view = [[UIView alloc] initWithFrame:window.frame];
viewController.view = view;

UINavgationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];

[window addSubview:[navController view];
[window makeKeyAndVisible];
Run Code Online (Sandbox Code Playgroud)

当我启动应用程序时,我看到一个导航栏,但没有调用loadView.我错过了什么?我以为在你打电话后会调用loadViewview

编辑

MyViewController *viewController = [[MyViewController alloc] init];
[viewController view];  // doesn't look right?

UINavgationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];

[window addSubview:[navController view];
[window makeKeyAndVisible];
Run Code Online (Sandbox Code Playgroud)

编辑了Jonah的评论,但loadView仍然没有被调用.

Jon*_*nah 10

当调用控制器的getter并且其视图当前时,A UIViewController将创建其视图(通过从nib加载或实现-loadView).viewnil

在显示的代码中,您永远不会调用view属性的getter,只调用它的setter.

此外,您还要从应用程序委托中分配控制器的视图.UIViewController预计s会根据需求创建自己的观点,而不是由其他类提供.当您意识到控制器卸载其视图并尝试重新创建它以响应内存警告时,此方法将在以后引发问题.让你的控制器创建它的视图,不要试图传递它.