无法转换类型 UINavigationController 的值不在主故事板中导航

Posted

技术标签:

【中文标题】无法转换类型 UINavigationController 的值不在主故事板中导航【英文标题】:Could not cast value of type UINavigationController not navigating in the Main Storyboard 【发布时间】:2021-07-07 22:52:31 【问题描述】:

我知道有很多类似的帖子,但没有人回答我的情况。我看到的所有帖子都只涉及主故事板。我正在导航到另一个名为 Date_Popup 的故事板,它在 NC 中嵌入了一个 VC。问题是这段代码可以在 iPhone 上运行,所以我知道 segue.identifier、Storyboard ID 和 VC ID 是正确的。另外,我在我的 7 个旧应用程序中使用了相同的代码,并且在那里运行良好。我很沮丧它在那里工作而不是在这个新应用程序中。我不确定这是 Xcode 问题还是什么。我留下了注释掉的代码,所以读者知道我已经尝试过两种方式。如果我注释掉引发错误的行,代码将执行,但不会设置 preferredContentSize。 感谢您的帮助。

这是我得到错误的地方。

popupVC = segue.destination as! Date_Popover_VC

她是我的密码。

override func prepare(for segue: UIStoryboardSegue, sender: Any?)
    
        if segue.identifier == K.Segue.to_Date_Popover
        
            var popupVC = UIStoryboard(name: K.StoryboardID.date_Popup_SB, bundle: nil).instantiateViewController(identifier: K.StoryboardID.date_Popover_VC) as! Date_Popover_VC
            let navigationController = UINavigationController(rootViewController: popupVC)
            
            // let storyboard : UIStoryboard = UIStoryboard(name: K.StoryboardID.date_Popup_SB, bundle: nil)
            // var popupVC: Date_Popover_VC = storyboard.instantiateViewController(withIdentifier: K.StoryboardID.date_Popover_VC) as! Date_Popover_VC
            // let navigationController = UINavigationController(rootViewController: popupVC)
            
            let deviceName = UIDevice().type
            let deviceString: String = ("\(deviceName)")
            
            if deviceString.contains(K.theDevice.iPad)
            
                popupVC = segue.destination as! Date_Popover_VC
                
                if ModelData.isInline()
                
                    popupVC.preferredContentSize = CGSize(width: 320, height: 300)

                 else 

                    popupVC.preferredContentSize = CGSize(width: 350, height: 410)
                

                navigationController.isNavigationBarHidden = true
                
             else if deviceString.contains(K.theDevice.iPhone) 
                
                present(navigationController, animated: true, completion: nil)
                navigationController.isNavigationBarHidden = false
            
            
            popupVC.theDate = dateFld_Outlet.text!
            popupVC.dateDelegate = self
        
    

【问题讨论】:

真的没什么好说的。该错误是不言自明的。如果popupVC = segue.destination as! Date_Popover_VC 崩溃,那是因为此segue 的目的地不是 Date_Popover_VC。正如错误消息所说,它是一个 UINavigationController 。你是唯一可以看到你的故事板和你的转场的人,所以解决这个问题取决于你。 【参考方案1】:

我终于知道我想错的地方了。在主情节提要上,情节提要对日期弹出框的引用链接到 segue。情节提要需要是情节提要的名称,而引用 ID 需要是情节提要上 VC 的名称。故事板是从下拉菜单中选择的。需要输入引用的 ID。它实际上与 UINavigationController 无关,因此错误措辞有点误导。

【讨论】:

以上是关于无法转换类型 UINavigationController 的值不在主故事板中导航的主要内容,如果未能解决你的问题,请参考以下文章

无法将类型“()”的值转换为预期的参数类型“字符串”

无法将类型为“System.Collections.Generic.List`1[EPMS.Domain.SingleItem]”的对象强制转换为类型“EPMS

无法转换类型的值'(数据:CMAccelerometerData!,错误:NSError!)

无法将 [Struct] 类型的值快速转换为 [string] 类型

无法转换类型“(_)-> Void?”的值到预期的参数类型'(() - > Void)?

C# 无法将类型为“System.Byte[]”的对象强制转换为类型“System.Data.DataTable