我面临的问题是,当我想以编程方式呈现一个视图时,我的应用程序会崩溃/显示空的黑色视图。
当用户点击通知时,vc就会打开。
我有一个选项卡栏,一个导航控制器和一个可以从选项卡栏中的第一个vc访问的视图。
当我想推压vc时,我的应用程序崩溃,但是当我删除要推压到vc(ChatVC)中viewDidLoad()中的所有内容时,我的应用程序显示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或任何其他函数都不会被调用,知道吗?

最佳答案

你试过而不是
let chatVc = AllChatsViewController()
从故事板实例化它?在故事板中找到你的viewController并给它加上一个标识符(我将使用chatVC)。然后
let storyboard = UIStoryboard(name:"Main", bundle Bundle.main)let chatVC = storyboard.instantiateViewController(withIdentifier: "chatVC")
原因是,如果使用上述方法,则所有子视图都将自动启动和布局,而不是要求您自己执行该操作的方法(这可能是您尚未执行的操作,因此会导致崩溃,而且如果删除视图,则会加载调用其通过的子视图的行)

10-08 13:54