Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios “材质组件”选项卡栏控制器错误_Ios_Swift_Tabbarcontroller_Material Components - Fatal编程技术网

Ios “材质组件”选项卡栏控制器错误

Ios “材质组件”选项卡栏控制器错误,ios,swift,tabbarcontroller,material-components,Ios,Swift,Tabbarcontroller,Material Components,接收错误:“使用MDCTabBarViewController选择选项卡栏项目时,由于未捕获异常“NSInvalidArgumentException”而终止应用程序,原因为“无效项目”。视图控制器加载,但在选择第二个选项卡后立即崩溃 class BusTabBarController: MDCTabBarViewController { override func viewDidLoad() { super.viewDidLoad()

接收错误:“使用MDCTabBarViewController选择选项卡栏项目时,由于未捕获异常“NSInvalidArgumentException”而终止应用程序,原因为“无效项目”。视图控制器加载,但在选择第二个选项卡后立即崩溃

    class BusTabBarController: MDCTabBarViewController {

        override func viewDidLoad() {
            super.viewDidLoad()

            view.backgroundColor = .white
            loadTabBar()
        }

        func loadTabBar() {

            let firstVC = BusStopFlexibleHeaderContainerViewController()
            let secondVC = BookmarksFlexibleHeaderContainerViewController()
            let thirdVC = UIViewController()

            let viewControllersArray = [firstVC, secondVC, thirdVC]
            viewControllers = viewControllersArray

            let childVC = viewControllers.first
            selectedViewController = childVC

            tabBar?.delegate = self

            tabBar?.items = [UITabBarItem(title: "Recents", image: nil, tag: 0),
                         UITabBarItem(title: "Favorites", image: nil, tag: 0),                                                           
                         UITabBarItem(title: "YAY", image: nil, tag: 2)]

            tabBar?.selectedItem = tabBar?.items.first

            tabBar?.backgroundColor = MDCPalette.grey.tint900
            tabBar?.selectedItemTintColor = .white
            tabBar?.unselectedItemTintColor = MDCPalette.grey.tint400
            tabBar?.inkColor = MDCPalette.blueGrey.tint100

        }

感谢您的帮助。谢谢

我也有同样的问题。在实现MDCTabBarViewController时

-(void)setSelectedViewController:(nullable UIViewController *)selectedViewController 
如果触发,则代码会执行以下操作:

self.tabBar.selectedItem = selectedViewController.tabBarItem;
因此,如果您不将barItem设置为控制器,您将得到该错误,因为引用为零

我更新了你的代码,所以我希望这能解决你的问题(我安装了pod版本26)


@MwcsMac不使用UINavigationController,只使用一个MDCTabBarViewController,其下有2个MDCFlexibleHeaderContainerServiceWControllerit@MwcsMac选择下一个选项卡时也不使用任何代码通过将viewControllers数组中每个视图控制器的TabBarItems设置为相应的TabBarItem来解决问题
class BusTabBarController: MDCTabBarViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    view.backgroundColor = .white
    loadTabBar()
}

func loadTabBar() {

    let firstVC = BusStopFlexibleHeaderContainerViewController()
    firstVC.tabBarItem = UITabBarItem(title: "Recents", image: nil, tag: 0)

    let secondVC = BookmarksFlexibleHeaderContainerViewController()
    secondVC.tabBarItem =  UITabBarItem(title: "Favorites", image: nil, tag: 0)

    let thirdVC = UIViewController()
    thirdVC.tabBarItem = UITabBarItem(title: "YAY", image: nil, tag: 2)

    let viewControllersArray = [firstVC, secondVC, thirdVC]
    viewControllers = viewControllersArray

    let childVC = viewControllers.first
    selectedViewController = childVC

    tabBar?.delegate = self

    tabBar?.items = [firstVC.tabBarItem,
                     secondVC.tabBarItem ,
                     thirdVC.tabBarItem]

    tabBar?.selectedItem = tabBar?.items.first

    tabBar?.backgroundColor = MDCPalette.grey.tint900
    tabBar?.selectedItemTintColor = .white
    tabBar?.unselectedItemTintColor = MDCPalette.grey.tint400
    tabBar?.inkColor = MDCPalette.blueGrey.tint100

}
}