当我为我的navigationController创建一个iboutlet并尝试将其添加到当前视图时,它没有显示任何内容。它真的很奇怪,当我在代码中初始化我的navigationController然后将它添加到视图时它完美地工作。
当我在mainWindows.xib中创建一个并将其添加到applicationDidFinishLaunching方法中的视图时,它甚至可以工作。
但是一旦我尝试从另一个viewController加载它就失败了,我留下了一个空白的屏幕。
所以当我以编程方式添加它或将其添加到mainWindow.xib中时它会起作用。
我一直在努力让它发挥作用。它似乎很简单,但我不能让它在其他xib文件中工作。
我的设置:
#import "RootViewController.h"
RootViewController *rootViewController=[[RootViewController alloc] init];
[window addSubview:rootViewController.navController.view];
我的RootViewController有导航控制器的ibOutlet。
有没有人有想法?我完全不明白为什么这个简单的事情不起作用。我错过了什么,它让我疯狂。
**** **** UPDATE 如果我将其更改为:上面的代码是有效的: 我需要访问rootViewController.view,否则它将无法正常工作?
#import "RootViewController.h"
RootViewController *rootViewController=[[RootViewController alloc] init];
if(rootViewController.view){
NSLog(@"nil");
}
[window addSubview:rootViewController.navController.view];
提前致谢!
答案 0 :(得分:1)
这是因为访问view
实际上会调用getter,它会懒惰地创建控制器视图(按需)。在您首次调用rootController
getter方法之前,view
的{{1}}不存在。创建第一个应用视图的常用方法是
view
它负责创建视图。
答案 1 :(得分:0)
这种情况一直发生在我身上的问题一直是我忘了在Interface Builder中连接一些东西。确保检查控制器是否已连接到应用程序代理中的rootViewController插座或任何位置。还要确保窗口已连接。
如果某些东西没有连接,那么你最终会在插座中出现nil,所以self.rootViewController.navController.view最终是[[nil navController] view],它是nil并试图添加nil作为子视图我认为。如果window是nil,你最终会和nil交谈,但是它可能是没有连接的rootViewController。
答案 2 :(得分:0)
我有一个类似的问题实际上甚至更奇怪,当控制器只在IB连接时,应用程序在iPad上正常加载,但在iPhone上我有一个空白屏幕,调试器显示控制器的视图有一个框架是0,0,0,0 我通过在ApplicationDidFinishLaunching中的代码中重置rootviewcontroller出口来修复它,但我不明白为什么这不起作用