无法将 tabBarController.viewController 转换为 UINavigationController

Posted

技术标签:

【中文标题】无法将 tabBarController.viewController 转换为 UINavigationController【英文标题】:Can not cast tabBarController.viewController to UINavigationController 【发布时间】:2018-01-18 20:58:52 【问题描述】:

我在我的故事板中添加了一个 UITabBarController,当我在我的 Appdelegate 中加载 managedContext 时,我想将它传递给我的初始 ViewController。但我不能将 viewControllers 转换为 UINavigationControllers,因此 managedContext 不会加载。

这是我的代码:

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 

        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let controller = storyboard.instantiateViewController(withIdentifier: "TabBarVC")
        self.window?.rootViewController = controller



        guard let tabBarController = window?.rootViewController as? UITabBarController else 
            print("1")
            return true
        
        guard let navController = tabBarController.viewControllers![0] as? UINavigationController else 
            print("2")
            return true
        
        guard let viewController = navController.topViewController as? ViewController else 

               print("3")

                return true

        

//  Version that works for UINavigationController
//        guard let navController = window?.rootViewController as? UINavigationController,
//            let viewController = navController.topViewController as? ViewController else 
//                return true
//        


        viewController.managedContext = coreDataStack.managedContext
        // Override point for customization after application launch.
        return true
    

当我简单地使用 UINavigationController 时,代码可以正常工作。我做错了什么?

编辑: 我绕过了导航控制器,将序列直接放到了 ViewController 中。现在可以了!

【问题讨论】:

我试图重现但不能。您确定将UITabBarController 的第一个视图控制器嵌入到故事板中的UINavigationController 中吗? 谢谢,我绕过了导航控制器,直接把序列放到了ViewController中。 对,所以ViewController 没有嵌入到UINavigationController 中。如果你真的想使用UINavigationController,你可以将ViewController嵌入UINavigationController,你的原始代码就可以工作了。 【参考方案1】:

很好,工作

if let tabbarcontroller = segue.destination as? UITabBarController

    let navigationController = tabbarcontroller.viewControllers![0] as! UINavigationController
    let controller = navigationController.topViewController as! HomeController
    controller.account = sender as? Account

【讨论】:

以上是关于无法将 tabBarController.viewController 转换为 UINavigationController的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server Management Studio 无法将类型为“System.__ComObject

为啥我无法正确获取图像数据或无法将数据发送到服务器?

无法将 createdAt 和 updatedAt 保存为日期时间值,也无法将后端保存为前端

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

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

无法将 .json 文件从 CSV 下载到 JSON 转换并且无法将 JSON 转换为 CSV