当我在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;
}
答案 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];