为什么当视图控制器超过 5 个时,设置选项卡栏控制器的 selectedViewController >= 4 会抛出错误?
Why does setting tab bar controller's selectedViewController >= 4 throw error when there are more than 5 view controllers?
我有一个以编程方式导航的 UITabBarController。调用以下方法:
// UITabBarController subclass
- (void)tabForward
{
NSUInteger selectedIndex = [self.viewControllers indexOfObject:self.selectedViewController];
selectedIndex = selectedIndex + 1;
if ( selectedIndex < [self.viewControllers count] )
self.selectedViewController = [self.viewControllers objectAtIndex:selectedIndex];
}
最初似乎工作正常,但是当有超过 5 个视图控制器且 selectedIndex == 4 时,同一行 (self.selectedViewController = [self.viewControllers objectAtIndex:selectedIndex];
) 会抛出错误 [__NSArrayM insertObject:atIndex:]: object cannot be nil
。但是,如果我只是从选项卡栏控制器中删除任何视图控制器,使总数达到 5 个或以下,不会引发任何错误。这让我抓狂。有谁知道我做错了什么吗?
试试用这个替换你的方法。
// UITabBarController subclass
- (void)tabForward
{
NSUInteger selectedIndex = [self.viewControllers indexOfObject:self.selectedViewController];
if (++selectedIndex < [self.viewControllers count]) {
self.selectedViewController = [self.viewControllers objectAtIndex:selectedIndex];
}
}
// UITabBarController subclass
- (void)tabForward
{
NSInteger selectedIndex = [self.viewControllers indexOfObject:self.selectedViewController];
NSInteger nextIndex = selectedIndex + 1;
if (nextIndex < self.viewControllers.count) {
if (nextIndex > 3) { // use navigation controller when selectedIndex >= 4
self.selectedViewController = self.moreNavigationController;
[self.moreNavigationController pushViewController:self.viewControllers[nextIndex] animated:YES];
} else {
self.selectedViewController = self.viewControllers[nextIndex];
}
}
}
我有一个以编程方式导航的 UITabBarController。调用以下方法:
// UITabBarController subclass
- (void)tabForward
{
NSUInteger selectedIndex = [self.viewControllers indexOfObject:self.selectedViewController];
selectedIndex = selectedIndex + 1;
if ( selectedIndex < [self.viewControllers count] )
self.selectedViewController = [self.viewControllers objectAtIndex:selectedIndex];
}
最初似乎工作正常,但是当有超过 5 个视图控制器且 selectedIndex == 4 时,同一行 (self.selectedViewController = [self.viewControllers objectAtIndex:selectedIndex];
) 会抛出错误 [__NSArrayM insertObject:atIndex:]: object cannot be nil
。但是,如果我只是从选项卡栏控制器中删除任何视图控制器,使总数达到 5 个或以下,不会引发任何错误。这让我抓狂。有谁知道我做错了什么吗?
试试用这个替换你的方法。
// UITabBarController subclass
- (void)tabForward
{
NSUInteger selectedIndex = [self.viewControllers indexOfObject:self.selectedViewController];
if (++selectedIndex < [self.viewControllers count]) {
self.selectedViewController = [self.viewControllers objectAtIndex:selectedIndex];
}
}
// UITabBarController subclass
- (void)tabForward
{
NSInteger selectedIndex = [self.viewControllers indexOfObject:self.selectedViewController];
NSInteger nextIndex = selectedIndex + 1;
if (nextIndex < self.viewControllers.count) {
if (nextIndex > 3) { // use navigation controller when selectedIndex >= 4
self.selectedViewController = self.moreNavigationController;
[self.moreNavigationController pushViewController:self.viewControllers[nextIndex] animated:YES];
} else {
self.selectedViewController = self.viewControllers[nextIndex];
}
}
}