【发布时间】:2011-12-22 05:59:39
【问题描述】:
您好,我刚开始在 iOS 5 上进行试验。我创建了一个没有情节提要的项目,并尝试以编程方式添加视图(根本不使用界面构建器)。我有以下代码,但窗口的 rootViewController 属性似乎不起作用。我在self.tabController 上进行了 NSLog,它显示了我的值(不是 null),但另一方面,当self.window.rootViewController = self.tabController 之后,我输出 self.window.rootViewController 它在控制台中给了我 null。
我已经为这个问题苦苦挣扎了很长时间。任何帮助将不胜感激。
以下是我的didFinishLaunching 方法:
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;
谢谢 维克
【问题讨论】:
-
你启用了 ARC 吗?
-
嘿韦恩。不,我没有。我正在使用保留和释放方法。
-
你在哪里创建了 self.window?你确定 self.window 不是 nil 吗?
-
嘿Firoze。谢谢回复。我在头文件中引用了 Window 说 UIWindow *window 并添加了属性说 @property(nonatomic,retain) IBOutlet UIWindow *window;在实现文件中将其合成为:@synthesize 窗口。在 iOS5 中我还有什么需要做的吗?因为这就是我以前在 iOS4 中所做的一切。有什么想法吗?
-
在 Firoze 的帮助下解决了这个问题。实际上,我必须以编程方式分配和初始化 self.window。我很困惑,因为我在 iOS 4 或更早的版本中从来不需要这样做。但是后来我才意识到,在iOS5之前,每个项目都有一个MainWindow.xib,它已经分配并初始化了self.window,现在如果我在iOS5中不使用storyboard,没有.xib文件,我需要自己分配和初始化它在代码中。