我遇到的问题是,当我想以编程方式呈现视图时,我的应用程序崩溃/显示空的黑色视图。
当用户点击通知时,会打开vc。 我有一个标签栏,一个导航控制器和一个可以从标签栏中的第一个vc访问的视图。
当我想推送vc我的应用程序崩溃时,但是当我删除我的viewDidLoad()中的所有内容被推送到vc(ChatVC)时,我的应用程序显示vc但空白和黑色。 我的app代理推送代码。 它不是关于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或任何其他函数,任何想法?
答案 0 :(得分:1)
let chatVc = AllChatsViewController()
从故事板中实例化它?在storyboard中找到你的viewController并将它标记为一个标识符(我将使用chatVC)。然后
let storyboard = UIStoryboard(name:"Main", bundle Bundle.main)
let chatVC = storyboard.instantiateViewController(withIdentifier: "chatVC")
原因是因为如果使用上述方法,所有子视图都会自动启动和布局,而不是您需要自己执行的方法(您可能无法完成崩溃,以及事实上,如果删除视图,则会加载调用您传递的子视图的行。)