Iphone rootViewController属性在具有xcode 4.2的iOS 5项目上不起作用

Iphone rootViewController属性在具有xcode 4.2的iOS 5项目上不起作用,iphone,ios5,xcode4.2,Iphone,Ios5,Xcode4.2,嗨,我刚开始在iOS 5上做实验。我创建了一个没有故事板的项目,并尝试以编程方式添加视图(根本不使用interface builder)。我有以下代码,但窗口的rootViewController属性似乎不起作用。我确实登录了self.tabController,它向我显示值(不为null),但在另一侧,当self.window.rootViewController=self.tabController之后,我输出self.window.rootViewController时,它在控制台中给我n

嗨,我刚开始在iOS 5上做实验。我创建了一个没有故事板的项目,并尝试以编程方式添加视图(根本不使用interface builder)。我有以下代码,但窗口的rootViewController属性似乎不起作用。我确实登录了
self.tabController
,它向我显示值(不为null),但在另一侧,当
self.window.rootViewController=self.tabController
之后,我输出
self.window.rootViewController
时,它在控制台中给我null

我已经为这个问题挣扎了很长时间了。任何帮助都将不胜感激

以下是我的
didfishLaunching
方法:

self.dataSource = [[[ADJWebDataSource alloc] init] autorelease];

ADJBrowseListingsViewController *browseListingsVC = [[ADJBrowseListingsViewController alloc] init];

ADJSecondViewController *secondVC = [[ADJSecondViewController alloc] init];
tabBarController = [[UITabBarController alloc] init];   
tabBarController.view.frame = CGRectMake(0, 0, 320, 460);
navController = [[UINavigationController alloc] initWithRootViewController:browseListingsVC];    
NSMutableArray* viewControllers = [[NSMutableArray alloc] initWithCapacity:2];

[viewControllers addObject:browseListingsVC];
[viewControllers addObject:secondVC];

[navController release];
[browseListingsVC release];
[secondVC release];

tabBarController.viewControllers = viewControllers;  
[viewControllers release]; 
browseListingsVC.dataSource = self.dataSource;   
NSLog(@"controller %@", self.tabBarController);   
self.window.rootViewController = self.tabBarController;   
NSLog(@"controller1 %@", self.window.rootViewController);
[self.window makeKeyAndVisible];

return YES;
谢谢
Vik

当您使用故事板时,为什么仍要为视图控制器创建对象? 您可以直接在故事板中准备视图流,添加必要的分段等。 如果视图控制器是浮动的(没有任何分段),则必须在story board类中使用“InstanceEviewController WithiIdentifier”方法。


对于视图控制器,如果要在故事板中添加导航,请选择视图控制器,进入菜单“编辑器”->“嵌入”,然后选择导航控制器。它将把导航控制器添加到视图控制器中。

在Firoze的帮助下解决了这个问题。实际上,我必须以编程方式分配和初始化self.window。我很困惑,因为在iOS 4或更早的版本中我从来没有这样做过。但后来我才意识到,在iOS5之前,每个项目都有一个MainWindow.xib,它分配并初始化了self.window,现在如果我没有在iOS5中使用storyboard,没有.xib文件,我需要在代码中自己分配并初始化它

嘿,Satyam,谢谢你的回复。正如我在帖子中告诉你的,我没有使用故事板。我在没有故事板支持的情况下创建了这个项目。当你使用iOS5时,你可以充分利用它的功能,这非常简单。不管怎样,你创建了tab视图控制器吗?我创建了tabBar控制器,如下所示:tabBarController=[[UITabBarController alloc]init];(整个代码在主要帖子中提到)故事板的问题是,在iOS5之前的iOS版本上,它不受支持。另外,我认为如果我不使用故事板并尝试编程,了解到底发生了什么将是一个很好的学习。你启用了ARC吗?嘿,韦恩。不,我没有。我正在使用保留和释放方法。您在哪里创建了self.window?你确定self.window不是零吗?嘿,菲罗兹。谢谢你的回复。我在头文件中引用了窗口,称为UIWindow*窗口,并添加了属性@property(非原子,保留)IBOutlet UIWindow*窗口;在实现文件中将其合成为:@synthesis window。在iOS5中还有什么我需要做的吗?因为这就是我在iOS4里经常做的事。有什么想法吗?在菲罗兹的帮助下解决了。实际上,我必须以编程方式分配和初始化self.window。我很困惑,因为在iOS 4或更早的版本中我从来没有这样做过。但后来我才意识到在iOS5之前,每个项目都有一个MainWindow.xib,它已经分配并初始化了self.window,现在如果我没有在iOS5中使用storyboard,就没有.xib文件,我需要在代码中自己分配并初始化它。