除非我访问.view,否则iphone导航控制器不会显示

时间:2010-01-10 00:18:06

标签: iphone interface-builder navigation navigationcontroller

当我为我的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];

提前致谢!

3 个答案:

答案 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出口来修复它,但我不明白为什么这不起作用