ошибка контроллера панели вкладок компонентов материала

Получение ошибки: «Завершение работы приложения из-за необработанного исключения« NSInvalidArgumentException », причина:« Недопустимый элемент »» при выборе элемента панели вкладок с помощью MDCTabBarViewController. Контроллер просмотра загружается, но вылетает сразу после выбора второй вкладки.

    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

        }

Любая помощь приветствуется. Спасибо!


person Ryan Aidan    schedule 01.09.2017    source источник
comment
@MwcsMac нет, не использует UINavigationController, просто MDCTabBarViewController с двумя MDCFlexibleHeaderContainerViewController под ним   -  person Ryan Aidan    schedule 01.09.2017
comment
@MwcsMac также не использует код при выборе следующей вкладки   -  person Ryan Aidan    schedule 01.09.2017
comment
Удалось решить проблему, установив TabBarItems каждого контроллера представления в массиве viewControllers на соответствующий им TabBarItem.   -  person Ryan Aidan    schedule 02.09.2017


Ответы (1)


У меня та же проблема. В реализации MDCTabBarViewController, когда

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

запускается есть строка, где код делает:

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

}
}
person gustavo.a.hansen    schedule 06.09.2017