2

当我为我的导航控制器创建一个 iboutlet 并尝试将其添加到当前视图时,它没有显示任何内容。真的很奇怪,当我在代码中初始化我的 navigationController 然后将其添加到视图中时,它可以完美运行。

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

但是,一旦我尝试从另一个 viewController 加载它,它就会失败,我只剩下一个空白屏幕。

因此,当我以编程方式添加它或将它添加到我的 mainWindow.xib 时它可以工作。

我已经尝试了几个小时让它工作。看起来很简单,但我无法让它在其他 xib 文件中工作。

我的设置:

#import "RootViewController.h"

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

我的 RootViewController 有到 navigationController 的 ibOutlet。

有人有想法吗?我完全不明白为什么这个简单的事情不起作用。我错过了什么,它让我发疯。

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

#import "RootViewController.h"

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

提前致谢!

4

3 回答 3

1

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

[window addSubview:someController.view]

它负责创建视图。

于 2010-01-10T18:39:11.660 回答
0

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

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

于 2010-01-10T01:41:42.883 回答
0

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

于 2012-01-06T10:34:52.620 回答