来自 AppDelegate 的当前 viewController 崩溃/空屏

Posted

技术标签:

【中文标题】来自 AppDelegate 的当前 viewController 崩溃/空屏【英文标题】:Present viewController from AppDelegate crashes/ empty screen 【发布时间】:2017-12-12 20:39:31 【问题描述】:

我面临的问题是,当我想以编程方式呈现视图时,我的应用程序崩溃/显示空白的黑色视图。

当用户点击通知时会打开 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 或任何其他函数,任何想法?

【问题讨论】:

试试这个:***.com/a/47131085/6680583 我也试过了,设置self.window?.rootViewController = tabBarController self.window?.makeKeyAndVisible()时崩溃了 【参考方案1】:

你试过而不是 let chatVc = AllChatsViewController() 从情节提要实例化它?在情节提要中找到您的 viewController 并将其作为标识符(我将使用 chatVC)。然后 let storyboard = UIStoryboard(name:"Main", bundle Bundle.main) let chatVC = storyboard.instantiateViewController(withIdentifier: "chatVC")

原因是因为如果使用上述方法,您的所有子视图都会自动启动和布局,而不是您需要自己做的方法(您可能没有这样做,因此崩溃,事实如果您删除视图确实加载了调用您的子视图的行。)

【讨论】:

嘿,我刚刚从 LetsBuildThatsApp 的人那里复制了方法,但我会再试一次,以前做过,但可能有问题 第一次尝试就成功了,谢谢你的支持! 我从通知中收到一个用户 ID,并想将其设置为 ChatVC 中的用户 ID,但 chatVC.userId 不起作用,我无法访问它 不确定这是否是问题所在,但可以尝试更改为 guard let chatVC = storyboard.instantiateViewController(withIdentifier: "chatVC") as?AllChatsViewController elsereturn,然后您的 chatVC 将是 AllCHatsViewController 类型,它会知道如何处理 userId。

以上是关于来自 AppDelegate 的当前 viewController 崩溃/空屏的主要内容,如果未能解决你的问题,请参考以下文章

来自 AppDelegate 的 UISegmentedControl

swift ios - 如何从 AppDelegate 在 ViewController 中运行函数

Swift - 从AppDelegate向View Controller添加子视图

来自 appDelegate 的 javascript 调用:phonegap iOS

来自 AppDelegate 的 PresentViewController 句柄ActionWithIdentifier

SWRevealViewController 不显示来自 Appdelegate 的状态栏推送