iPhone 6.0模拟器:应用程序窗口应在应用程序启动结束时具有根视图控制器

时间:2012-10-04 09:12:11

标签: iphone ios-simulator

当我在iPhone 6.0模拟器中运行我的应用程序时,它正在显示

应用程序窗口应在应用程序启动结束时具有根视图控制器

在其他模拟器中它并不存在。为什么? 这个错误是什么意思?

我的应用程序的导航流程如下:首先我的应用程序应该显示登录屏幕。进入应用程序后,我需要使用tabbar显示一个视图。在那个视图中会有很多按钮,当我们点击这些按钮时,它应该显示没有tabbar的相应viewControllers。这就是为什么我将这些导航控制器添加到窗口。

这是我的didFinishLaunchingWithOptions

的代码
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.tabBarController = [[UITabBarController alloc] init];
    self.window.rootViewController = self.tabBarController;

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.backgroundColor=[UIColor blackColor];

    [application setStatusBarStyle:UIStatusBarStyleBlackOpaque];

    Object1 = [[Class1 alloc] initWithNibName:@"Class1" bundle:nil];
    tempNav=[[UINavigationController alloc]initWithRootViewController:Object1];
    tempNav.navigationBar.hidden=YES;
    tempNav.view.frame  = CGRectMake(0.0f, 20.0f, 320.0f, 460.0f);
    self.window addSubview:tempNav.view]; 

    LoginObj = [[Login alloc] initWithNibName:@"Login" bundle:nil];
    navController=[[UINavigationController alloc]initWithRootViewController:LoginObj];
    navController.navigationBar.hidden=YES;
    navController.view.frame  = CGRectMake(0.0f, 20.0f, 320.0f, 460.0f);
    [self.window addSubview:navController.view];

    Obj2 = [[Class2 alloc] initWithNibName:@"Class2" bundle:nil];
    navController1=[[UINavigationController alloc]initWithRootViewController:Obj2];
    navController1.navigationBar.hidden=YES;
    navController1.view.frame  = CGRectMake(0.0f, 20.0f, 320.0f, 460.0f);
    [self.window addSubview:navController1.view];

    Obj3 = [[Class3 alloc] initWithNibName:@"Class3" bundle:nil];
    navController2=[[UINavigationController alloc]initWithRootViewController:Obj3];
    navController2.navigationBar.hidden=YES;
    navController2.view.frame  = CGRectMake(0.0f, 20.0f, 320.0f, 460.0f);
    [self.window addSubview:navController2.view];

    Obj4 = [[Class4 alloc] initWithNibName:@"Class4" bundle:nil];
    navController3=[[UINavigationController alloc]initWithRootViewController:Obj4];
    navController3.navigationBar.hidden=YES;
    navController3.view.frame  = CGRectMake(0.0f, 20.0f, 320.0f, 460.0f);
    [self.window addSubview:navController3.view];

    [self.window makeKeyAndVisible];

    return YES;  
}

2 个答案:

答案 0 :(得分:1)

正如wattson12所说,你需要在你的app delegate中做这样的事情:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.mainViewController = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
    self.window.rootViewController = self.mainViewController;    // you need this line!
    [self.window makeKeyAndVisible];
    return YES;
}

如果您未明确设置UIWindow rootViewController property,则会看到此消息。

如果您使用Xcode 4.5创建一个新项目,它应该在模板应用程序委托中具有此代码。如果您使用的是在早期版本的Xcode中创建的项目,那么该行可能会丢失,并且您会收到警告消息。

答案 1 :(得分:0)

这表示您未设置应用rootViewController。 首先从代码中删除这些行 -

[self.window addSubview:tempNav.view];  
[self.window addSubview:navController.view];  
[self.window addSubview:navController1.view];  
[self.window addSubview:navController2.view];  
[self.window addSubview:navController3.view];  

在您的代码中,您正在使用UITabBarController但未初始化其viewController的数组,所以请执行此操作 -

self.tabBarController.viewControllers = [NSArray arrayWithObjects:tempNav, navController, navController1, navController2, navController3, nil];
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];