Как мне создать экземпляр UITabBarController программно из раскадровки?

#swift

#swift

Вопрос:

У меня есть раскадровка, которая включает сцену TabBarController. Я пытаюсь создать его программно, а затем установить в качестве RootViewController.

Я установил точку останова после установки переменной раскадровки и могу подтвердить, что она ее находит. Проблема заключается в загрузке сцены для TabBarController.

Я попытался создать пользовательский подкласс TabBarController и установить его в качестве имени «Класса» в инспекторе идентификации, и я получаю то же самое.

Я также пробовал создавать экземпляры UIViewControllers в той же раскадровке, и они отлично открываются. Это просто происходит с TabBarController. Возможно, это ограничение и не может быть выполнено.

 @IBAction func loginButtonTapped(_ sender: UIButton) {
        let storyboard = UIStoryboard(name: StoryboardConstants.Composition, bundle: nil)
        if let vc = storyboard.instantiateViewController(withIdentifier: "Tabbar") as? UITabBarController {
            UIApplication.shared.keyWindow?.rootViewController = vc
        }
    }
  

Это ошибка, которую я получаю:
* Завершение работы приложения из-за неперехваченного исключения ‘NSInternalInconsistencyException’, причина: ‘Не удалось загрузить контроллер просмотра сцены для идентификатора ‘Tabbar» * Стек вызовов первого запуска:

Ответ №1:

Ссылка на раскадровку без имени

Наконец-то это заработало! Итак, у меня все было правильно настроено в инспекторе идентификации, проблема заключалась в том, что я не назначил раскадровку ссылке на раскадровку, которую я связал с TabBarController.

Ошибка не дала мне подсказки, но, надеюсь, это кому-нибудь поможет.

Комментарии:

1. Как назначить раскадровку ссылке на раскадровку?

Ответ №2:

Вы не установили идентификатор раскадровки для этого контроллера представления.

  1. Откройте раскадровку.
  2. Выберите желтый ViewController
  3. Коснитесь инспектора идентификации (3-е нажатие в группе справа).
  4. Введите «Панель вкладок» в поле «Идентификатор раскадровки»

Комментарии:

1. Ссылка Я ввел идентификатор раскадровки, вот скриншот того, что у меня есть.

Ответ №3:

убедитесь, что вы добавили панель вкладок в цель проекта. Еще один вариант — очистить ваш проект, перестроить и проверить с помощью identity inspector, есть ли отключенное соединение с раскадровкой.

введите описание изображения здесь

Комментарии:

1. Можете ли вы добавить скриншот, объясняющий, как выглядит «проверка с помощью identity inspector на предмет наличия отключенного соединения с раскадровкой»?