2

当我创建一个iboutlet到我的navigationController并尝试将其添加到当前视图它不显示任何东西。它非常奇怪,当我在代码中初始化我的navigationController,然后将它添加到视图中,它完美地工作。iphone navigationController不会显示,除非我访问.view

它甚至可以在mainWindows.xib中创建一个并将其添加到我的applicationDidFinishLaunching方法中的视图中。

但只要我尝试从另一个viewController加载它失败,我留下一个空白屏幕。

所以它工作时,我以编程方式添加它或将其添加到我的mainWindow.xib。

我一直在尝试几个小时才能使它工作。这似乎很简单,但我无法让它在其他xib文件中工作。

我的设置:

#import "RootViewController.h" 

RootViewController *rootViewController=[[RootViewController alloc] init]; 
[window addSubview:rootViewController.navController.view]; 

我RootViewController的有IBOutlet中的navigationController。

有没有人有想法?我完全不明白为什么这个简单的东西不起作用。我错过了什么,它把我逼疯了。

****更新**** 上述代码的作品,如果我将它更改为: 我需要访问rootViewController.view,否则它不会工作,为什么?

#import "RootViewController.h" 

RootViewController *rootViewController=[[RootViewController alloc] init]; 
if(rootViewController.view){ 
NSLog(@"nil"); 
} 
[window addSubview:rootViewController.navController.view]; 

在此先感谢!

回答

1

这是因为访问view实际上调用了getter,它会延迟地(按需)创建控制器的视图。 rootControllerview在您首次调用view getter方法之前不存在。创建第一个应用视图的常用方法是

[window addSubview:someController.view] 

并且它负责创建视图。

0

所有这些都发生在我身上的问题一直是我忘了在Interface Builder中连接一些东西。确保检查您的控制器是否连接到应用程序委托或任何地方的rootViewController插座。同时确保窗口已连接。

如果某些东西没有连接,那么你在插座中以零结束,所以self.rootViewController.navController.view最终成为[[nil navController]视图],它是零,并尝试将nil作为子视图添加我认为。类似地,如果window为零,那么最终会与nil交谈,但它可能是未连接的rootViewController。

+0

感谢您的回答!我检查了一切,似乎是oke,我通过访问rootViewController.view来解决它,但它不知道为什么必要 – Bjorn 2010-01-10 13:47:04

0

我有一个类似的问题,实际上甚至更加狡猾,当控制器仅在IB连接时,应用程序在iPad上正常加载但在iPhone上我有一个空白屏幕,调试器显示控制器的视图有一个框架这是0,0,0,0 我通过重置ApplicationDidFinishLaunching代码中的rootviewcontroller插座来解决它,但我不明白为什么这不起作用

相关问题