-2

こんにちは私は以前にいくつかのテストを行っていましたが、私のアプリは問題なく実行されていました。さらにテストを行いたかったので、デバイスからアプリを削除してから、実行して再インストールすることにしました。

さて、何らかの理由で、スプラッシュ画面が表示された後、クラッシュしてエラーが発生する段階になりました。

 Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 3 beyond bounds [0 .. 2]'

これは明らかに、範囲外の配列が正しいことを意味しますか?しかし、なぜ今、そしてどのようにしてこれがどこでどのビューコントローラーで起こっているのかを知ることができますか?アプリを再実行して再インストールしようとすると、以前はどのように実行できましたか?突然、このエラーが発生しますか?

ありがとう

編集 エラーは次のコードの配列にあります

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

  exploreViewController *view1 = [[exploreViewController alloc] initWithNibName:@"exploreViewController" bundle:nil];
view1.title= @"Explore";

Upcoming *view2 = [[Upcoming alloc] initWithNibName:@"Upcoming" bundle:nil];
view2.title = @"Upcoming";

calcViewController *view3 = [[calcViewController alloc] initWithNibName:@"calcViewController" bundle:nil];
view3.title = @"Calc";

UINavigationController *nav1 = [[UINavigationController alloc] initWithRootViewController:view1];
UINavigationController *nav2 = [[UINavigationController alloc] initWithRootViewController:view2];
UINavigationController *nav3 = [[UINavigationController alloc] initWithRootViewController:view3];

self.tabBarController = [[[UITabBarController alloc] init] autorelease];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:nav1,nav2,nav3,nil];
self.tabBarItem = [[[UITabBarItem alloc] init] autorelease];

NSArray *tabBarItems = self.tabBarController.tabBar.items; 
UIImage *tab1 = [UIImage imageNamed:@"85-trophy.png"]; 
UIImage *tab2 = [UIImage imageNamed:@"12-eye.png"]; 
UIImage *tab3 = [UIImage imageNamed:@"237-key.png"];

NSArray *tabBarImages = [[[NSArray alloc] initWithObjects:tab1, tab2, tab3,nil]autorelease]; 
NSInteger tabBarItemCounter; 
for (tabBarItemCounter = 0; tabBarItemCounter < [tabBarItems count]; tabBarItemCounter++) 
{ 
    tabBarItem = [tabBarItems objectAtIndex:tabBarItemCounter]; 
    tabBarItem.image = [tabBarImages objectAtIndex:tabBarItemCounter]; 
} 
4

1 に答える 1

2

このクラッシュの理由は次のとおりです。tabBarに5つのアイテム(nav1、nav2、nav3、nav4、nav6)を追加していますが、タブには3つの画像(tab1、tab2、tab3)しかありません。したがって、forループが4番目のタブに到達すると、tabBarImagesオブジェクトが3つしかないため、クラッシュします。

それを除けば、コードは少し乱雑に見えます。これが、一目でエラーが表示されない理由である可能性があります。

// 編集

あなたは物事を複雑にしています-次のコードを試してみてください

UINavigationController *nav1 = [[UINavigationController alloc] initWithRootViewController:__your_viewController__];
nav1.title = @"Explore";
nav1.tabBarItem.image = [UIImage imageNamed:@"85-trophy.png"];

UINavigationController *nav2 = [[UINavigationController alloc] initWithRootViewController:__your_viewController__];
nav2.title = @"Upcoming";
nav2.tabBarItem.image = [UIImage imageNamed:@"12-eye.png"];

UINavigationController *nav3 = [[UINavigationController alloc] initWithRootViewController:__your_viewController__];
nav3.title = @"Calc";
nav3.tabBarItem.image = [UIImage imageNamed:@"237-key.png"];

UITabBarController *tabBarController = [[UITabBarController alloc] init];    
[tabBarController setViewControllers:[NSArray arrayWithObjects:nav1, nav2, nav3, nil]];

[nav1 release];
[nav2 release];
[nav3 release];
于 2012-05-21T06:37:12.593 に答える