材料组件标签栏控制器错误

问题描述:

接收错误:“使用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 

     } 

任何帮助表示赞赏。谢谢!

+0

@MwcsMac nope不使用UINavigationController,只是一个带有2个MDCFlexibleHeaderContainerViewControllers的MDCTabBarViewController –

+0

@MwcsMac在选择下一个标签时也没有使用任何代码 –

+0

通过将viewControllers数组中的每个视图控制器的TabBarItems设置为其对应的TabBarItem –

我有同样的问题。在当

-(void)setSelectedViewController:(nullable UIViewController *)selectedViewController 

被解雇MDCTabBarViewController的执行存在其中的代码做一个行:

self.tabBar.selectedItem = selectedViewController.tabBarItem; 

所以,如果你没有在barItem设置到控制器,你会得到这个错误造成参考是零

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

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 

} 
}