Присутствует viewController из AppDelegate падает / пустой экран

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

Открытие vc происходит, когда пользователь нажимает на уведомления. У меня есть панель вкладок, контроллер навигации и вид, который доступен с первого vc в панели вкладок.

Когда я хочу нажать на vc, мое приложение вылетает, однако, когда я удаляю все в viewDidLoad() в моем, чтобы его подтолкнули к vc ( ChatVC), мое приложение отображает vc, но пустой и черный. Пуш-код моего приложения делегат. Речь идет не о chatvc, я пробовал каждый контроллер представления, который у меня есть, и он вылетает в одной точке.

 let chatVc = AllChatsViewController()

        if let tabbarControler = window?.rootViewController as? MainTabBarController {
            tabbarControler.selectedIndex = 0

            //tabbarControler.presentedViewController?.dismiss(animated: true, completion: nil)


            if let homeNav = tabbarControler.viewControllers?.first as? UINavigationController {
                homeNav.pushViewController(chatVc, animated: true)
                print(followerId)
            }
        }

    }

Обновить

  if let chatPartnerId = userInfo["chatPartnerId"] {
        let storyboard = UIStoryboard(name:"Chat", bundle: Bundle.main)
        guard let chatVC = storyboard.instantiateViewController(withIdentifier: "MessageViewController") as? MessageViewController else {return}
        chatVC.userId = chatPartnerId as! String

        if let tabbarControler = window?.rootViewController as? MainTabBarController {
            tabbarControler.selectedIndex = 0

            tabbarControler.presentedViewController?.dismiss(animated: true, completion: nil)


            if let homeNav = tabbarControler.viewControllers?.first as? UINavigationController {
                homeNav.pushViewController(chatVC, animated: true)

            }
        }

Это теперь выдвигает, как и ожидалось, ViewController, но ни ViewDidLoad, ни любая другая функция не будут вызваны, любая идея?

1 ответ

Решение

Ты пробовал вместоlet chatVc = AllChatsViewController()создать экземпляр из раскадровки? В раскадровке найдите ваш viewController и присвойте ему идентификатор (я буду использовать chatVC). затем let storyboard = UIStoryboard(name:"Main", bundle Bundle.main) let chatVC = storyboard.instantiateViewController(withIdentifier: "chatVC")

Причина в том, что при использовании вышеописанного метода все ваши подпредставления инициируются и выкладываются автоматически, в отличие от вашего метода, где вы обязаны сделать это самостоятельно (чего вы, вероятно, не сделали, поэтому происходит сбой и тот факт, что если вы delete view загрузил строки, которые вызывают ваши подпредставления, которые он пропускает.)

Другие вопросы по тегам