Swift 3: UITabBarController error: '*** -[__NSArray0 objectAtIndex:]: index 1 beyond bounds for empty NSArray'

Swift 3: UITabBarController error: '*** -[__NSArray0 objectAtIndex:]: index 1 beyond bounds for empty NSArray'

我创建了一个自定义标签栏控制器。我已经通过 Storyboard 完成了这个并且工作正常。我现在正试图通过代码实现这一点,没有情节提要,但我一直因为这个错误而崩溃。

'*** -[__NSArray0 objectAtIndex:]: index 1 beyond bounds for empty NSArray'

有人知道问题出在哪里吗?谢谢大家...

import UIKit


class SecondController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .white
    }
}

class ThirdController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .white
    }
}

class AnimatedTabBarController: UITabBarController {

    var secondItemImageView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let secondItemView = self.tabBar.subviews[1]
        self.secondItemImageView = secondItemView.subviews.first as! UIImageView
        self.secondItemImageView.contentMode = .center

    }

    override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {

        if item.tag == 1 {
            //do our animations
            self.secondItemImageView.transform = CGAffineTransform.identity

            UIView.animate(withDuration: 0.7, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 1, options: .curveEaseInOut, animations: { () -> Void in

                let rotation = CGAffineTransform(rotationAngle: CGFloat(M_PI_2))
                self.secondItemImageView.transform = rotation

            }, completion: nil)

        }

    }

}

class CustomTabBarController: AnimatedTabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let firstController = ThirdController()
        let firstNavController = UINavigationController(rootViewController: firstController)
        firstNavController.title = "Requests"
        firstNavController.tabBarItem.image = UIImage(named: "home_selected")
        firstNavController.tabBarItem.tag = 0

        let secondController = SecondController()
        let secondNavController = UINavigationController(rootViewController: secondController)
        secondNavController.title = "Messenger"
        secondNavController.tabBarItem.image = UIImage(named: "home_selected")
        secondController.tabBarItem.tag = 1

        viewControllers = [firstNavController, secondNavController]

        tabBar.isTranslucent = false

        let topBorder = CALayer()
        topBorder.frame = CGRect(x: 0, y: 0, width: 1000, height: 0.5)
        topBorder.backgroundColor = UIColor.lightGray.cgColor

        tabBar.layer.addSublayer(topBorder)
        tabBar.clipsToBounds = true

    }
}

我注意到一件事:

let secondItemView = self.tabBar.subviews[1]

AnimatedTabBarController.viewDidLoad()的第一行。但是,选项卡栏控制器直到 right 之后才在 CustomTabBarController.viewDidLoad() 中设置。我认为您会希望在 init 方法中初始化包含的视图控制器。