2017-09-01 5 views
2

受信エラー:「MDCTabBarViewControllerを使用してタブバー項目を選択すると、キャッチされない例外 'NSInvalidArgumentException'によってアプリが終了しました。理由:「無効なアイテム」です。 View Controllerはロードされますが、2番目のタブを選択した直後にクラッシュします。マテリアルコンポーネントタブバーコントローラエラー

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いいえUINavigationController、その下に2 MDCFlexibleHeaderContainerViewControllers有するだけMDCTabBarViewControllerを使用していない –

+0

それらcorrespondinng TabBarItemにviewControllersアレイの各ビューコントローラのTabBarItemsを設定することにより、問題を解決するために、管理次のタブ –

+0

を選択するとき、任意のコードを使用しない@MwcsMac –

答えて

1

私は同じ問題があります。

self.tabBar.selectedItem = selectedViewController.tabBarItem; 

をですから、コントローラにbarItemを設定しない場合は、そのエラーを取得します:

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

が発射されるMDCTabBarViewControllerの実装では、コードがない行があります私はあなたのコードを更新し

nilを参照がある起こすので、私は(私はポッドのバージョンをインストールする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 

} 
}