iOS:崩溃在tabBarController setSelectedViewController

我正在iOS应用程序,我有一个TabBar控制器和相应的视图控制器。 对于用视图控制器设置的tabbar控制器中的每个选项卡。 这个设置是在.xib文件中完成的。 但是,仍然在didFinishLaunchingWithOptions我添加下面的代码,以及启动默认视图作为第二个选项卡视图时,我的应用程序启动,

self.viewController = [[SecondViewController alloc]initWithNibName:@"SecondViewController" bundle:[NSBundle mainBundle]]; [self.tabBarController setSelectedViewController:self.viewController]; // crash 

这里发生的事情是,它在iOS 4模拟器和设备上工作的很好,但是在iOS 5模拟器和设备的代码的第二行发生崩溃。 我们试图找出为什么它只在iOS 5设备/模拟器崩溃,仍然无法完成它。 如果视图控制器已经安装在.xib文件本身,那么我不需要实例化对象,并在iOS5的didFinishLaunchingWithOptions中做这样的设置? 请告知,这个崩溃的原因是什么?

谢谢!

当您使用setSelectedViewController ,控制器必须在标签栏控制器的viewControllers数组中。 但是你在这里创build一个新的控制器,所以它一定会失败。 你应该只使用setSelectedIndex 。 这是最简单的。

因此,如果您使用的是NIB,那么didFinishLaunchingWithOptions可能如下所示:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; UIViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil]; UIViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; self.tabBarController = [[UITabBarController alloc] init]; self.tabBarController.viewControllers = @[viewController1, viewController2]; self.window.rootViewController = self.tabBarController; [self.window makeKeyAndVisible]; // tell the tab bar controller to start with the second tab [self.tabBarController setSelectedIndex:1]; return YES; } 

如果使用故事板,并且您的初始控制器是该选项卡栏控制器,则可以:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { UITabBarController *tabController = (UITabBarController *)self.window.rootViewController; [tabController setSelectedIndex:1]; return YES; }