2016-12-14 7 views
0

Я использую код, который я сделал в другом приложении. В другом приложении код работает нормально. Что я делаю - при загрузке splashViewController загружаются и кэшируются изображения слайдшоу. Когда загрузка будет завершена, он представит mainviewcontroller, который является maintableviewcontroller. Вот код, который я использую:NSRangeException indexOutOfBound

UIImage* tabBarBackground = [UIImage imageNamed:@"tabBar.png"]; 
[[UITabBar appearance] setBackgroundImage:tabBarBackground]; 
UITabBarController *rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"barController"]; 
UITabBar *tabBar = rootViewController.tabBar; 
UITabBarItem *tabBarItem1 = tabBar.items[0];// the error here happening event if i comment out this line the error is hapen at the next uibar items 
UIImage *selectedLogo = [[UIImage imageNamed:@"productSelected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
UIImage *unselectedLogo = [[UIImage imageNamed:@"product"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
[tabBarItem1 setImage:unselectedLogo]; 
[tabBarItem1 setSelectedImage:selectedLogo]; 
[tabBarItem1 setTitle:@"My Product"]; 
UITabBarItem *tabBarItem2 = tabBar.items[1]; 
UIImage *selectednews = [[UIImage imageNamed:@"notificationSelected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
UIImage *unselectednews = [[UIImage imageNamed:@"notification"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
[tabBarItem2 setImage:unselectednews]; 
[tabBarItem2 setSelectedImage:selectednews]; 
[tabBarItem2 setTitle:@"Notifications"]; 
UITabBarItem *tabBarItem3 = [tabBar.items objectAtIndex:2]; 
UIImage *selectedLocation = [[UIImage imageNamed:@"locationSelected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
UIImage *unselectedLocation = [[UIImage imageNamed:@"location"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
[tabBarItem3 setImage:unselectedLocation]; 
[tabBarItem3 setSelectedImage:selectedLocation]; 
[tabBarItem3 setTitle:@"Locate Us"]; 
UITabBarItem *tabBarItem4 = tabBar.items[3]; 
UIImage *selectedaboutus = [[UIImage imageNamed:@"moreSelected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
UIImage *unselectedaboutus = [[UIImage imageNamed:@"more"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
[tabBarItem4 setImage:unselectedaboutus]; 
[tabBarItem4 setSelectedImage:selectedaboutus]; 
[tabBarItem4 setTitle:@"More"]; 
[self.loadingActivityIndicator stopAnimating]; 
[self.navigationController popToRootViewControllerAnimated:YES]; 
[self presentViewController:rootViewController animated:YES completion:nil]; 
+0

пытаются отладить и проверить tabbar.items на где он сбой. Если вы получаете эту ошибку, она должна быть пустой. – iBug

+0

Хммм это заставляет меня чувствовать себя запутанным, как это работает во втором приложении, и в новом приложении оно не работает –

ответ

0

Пожалуйста, поставьте галочку для подсчета tabbar.items первой, а затем получить доступ ко всем вкладке штриховых элементов:

if(tabbar.items.count==tabCount) //tabCount is number of tabs in your tabbar 
{ 
    UITabBarItem *tabBarItem1 = tabBar.items[0]; 
    //<remaining code> 
}else 
{ 
    //either tabbar is nil or tabbar doesn't not have any tabs, so handle accordingly 
} 

Кроме того, поскольку TabBar работает нормально в другое приложение, пожалуйста, проверьте свой StoryBoard, если он правильно создает и связывает вкладку для rootViewController.

Вот хороший пост с детальными шагами, чтобы правильно создать TabBar с помощью раскадровки, которые могут помочь вам отлаживать/проверить, если вы создали привязок и перетекает правильно: https://guides.codepath.com/ios/Using-Tab-Bar-Controllers