【问题标题】:rootViewController property does not work on iOS 5 project with xcode 4.2rootViewController 属性不适用于带有 xcode 4.2 的 iOS 5 项目
【发布时间】: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文件,我需要自己分配和初始化它在代码中。

标签: iphone ios5 xcode4.2


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 嘿萨蒂亚姆,感谢您的回复。正如我在帖子中告诉你的,我没有使用故事板。我在没有故事板支持的情况下创建了这个项目。
    • 当你在使用iOS5的时候,你可以充分利用它的强大功能,这非常容易。不管怎样,你创建了tab view controller吗?
    • 我确实创建了 tabBar 控制器,如下所示: tabBarController = [[UITabBarController alloc] init]; (主要帖子中提到了整个代码)故事板的问题再次是它在 iOS 5 之前的 iOS 版本上不受支持。另外,我假设如果我不使用它来了解究竟发生了什么将是一个很好的学习故事板并尝试以编程方式完成
    猜你喜欢
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多