【问题标题】:Instantiated NavigationController from storyboard reference the same RootViewController来自情节提要的实例化 NavigationController 引用相同的 RootViewController
【发布时间】:2018-08-06 03:28:01
【问题描述】:

我正在从 Storyboard 中实例化一个导航控制器,我已经为其定义了根视图控制器。

如果我按如下方式实例化多个导航控制器:

        let nav = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "CategorizedArticleNavigationController") as! UINavigationController
        let rootVC = nav.viewControllers.first as! CategorizedArticlesViewController
        let nav_1 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "CategorizedArticleNavigationController") as! UINavigationController
        let rootVC_1 = nav.viewControllers.first as! CategorizedArticlesViewController            
        self.present(rootVC, animated: true, completion: nil)

我尝试模态呈现后出现异常:

由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'应用程序试图呈现 模态的主动控制器...'

经过调试,令我惊讶的是,我发现 nav != nav_1

但是

rootVC == rootVC_1

因此,我在尝试以模态方式呈现导航时遇到异常,因为它发现其根 vc 已被呈现。

有人看过吗?我应该提交错误吗?或者这是出于某种目的?

更新:这绝对是我的错误,@Samantha 澄清了这一点

谢谢。

【问题讨论】:

    标签: ios xcode interface-builder uistoryboard


    【解决方案1】:

    我认为它们相同的原因是这一行:

    let rootVC_1 = nav.viewControllers.first as! CategorizedArticlesViewController            
    

    在这里,您将 rootVC_1 分配给原始导航控制器的根视图控制器(因此,与 rootVC 相同的对象)。应该是

    let rootVC_1 = nav_1.viewControllers.first as! CategorizedArticlesViewController            
    

    【讨论】:

    • 哦,天哪,我的 mac 没在我身上,我明天再回来,谢谢,我会及时通知你 :)
    • 异常发生在:self.present(rootVC, animated: true, completion: nil) 当然因为 rootVC 已经附加到 navigationController,我应该展示导航控制器。 self.present(nav, 动画: true, 完成: nil);
    猜你喜欢
    • 2014-03-10
    • 2013-03-03
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    相关资源
    最近更新 更多