无法将“UINavigationController”类型的值转换为 tabBarController

Posted

技术标签:

【中文标题】无法将“UINavigationController”类型的值转换为 tabBarController【英文标题】:Could not cast value of type 'UINavigationController to tabBarController 【发布时间】:2017-10-04 06:04:19 【问题描述】:

我正在尝试将数据从一个 tabBarController 传递到第二个 tabBarController 但出现错误,我尝试了很多方法但数据没有传递

他们无论如何都要在选项卡之间传递数据吗?

我正在尝试使用此代码,但出现错误“无法将 'UINavigationController 类型的值转换为 CategoriesViewController”

enter code here



    let barViewControllers = self.tabBarController?.viewControllers

    let svc = barViewControllers![1] as! CategoriesViewController 

    svc.categoriesData = self.categoryProductsDict  //shared model

【问题讨论】:

这样想:标签栏 -> 导航控制器 -> 你的控制器。所以你有了导航控制器,你需要循环来获取你的控制器。 【参考方案1】:
let svc = (barViewControllers![1] as! UINavigationController).viewControllers[0]

我相信所有的标签视图控制器都嵌入了导航控制器。因此,当您从选项卡 viewController 访问 viewController 时,您将获得 UINavigationController。为了访问 VC,您必须在 NavigationController 的索引 0 处获取 viewControllers

更干净更安全的代码

if let vc = (self.tabBarController.viewControllers![0] as? UINavigationController)?.viewControllers[0] as? CategoriesViewController 
   //access your VC here                            

【讨论】:

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

ID:[...] 的 NSManagedObject 已失效

带有标签栏的 presentViewController

如何正确关闭作为模式呈现的 UINavigationController?

UINavigationController - 何时释放推送的视图控制器等

使用 UINavigationController 从另一个控制器更新或重新加载 UIViewController?

为啥我似乎必须在 iOS 应用程序委托中键入 window.rootViewController?