为什么当视图控制器超过 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];
        }
    }
}