Xcode 无法强制转换类型为“UINavigationController”的值

Xcode 无法强制转换类型为“UINavigationController”的值,xcode,swift,Xcode,Swift,我正在为我的应用程序实现一个搜索界面,因此基本上我会将搜索关键字从一个ViewController传递到另一个ViewController 我已经多次传递这种类型的参数,但这次似乎有些奇怪。目标ViewController嵌入在导航控制器中 现在代码看起来像这样 override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject!) { if (segue?.identifier == "home_to_s

我正在为我的应用程序实现一个搜索界面,因此基本上我会将搜索关键字从一个ViewController传递到另一个ViewController

我已经多次传递这种类型的参数,但这次似乎有些奇怪。目标ViewController嵌入在导航控制器中

现在代码看起来像这样

override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject!) {
    if (segue?.identifier == "home_to_search") {

       var searchKeyword = txtSearchBarHome.text
       var svc = segue?.destinationViewController as! SearchViewController;
       svc.toPassSearchKeyword = searchKeyword;

       //let nav = segue?.destinationViewController as! UINavigationController
       //let svc = nav.topViewController as! SearchViewController
       //svc.toPassSearchKeyword = searchKeyword;
    }
}
我已经探讨了这些问题 没有运气


让我感到奇怪的是,我已经在导航控制器中嵌入了ViewController,可以通过分段传递参数。但是,在这种情况下,它会抛出类型为“UINavigationController”的无法强制转换值错误。如果我尝试上面的注释代码,它不会在那里抛出错误,而是在AppDelegate类中抛出错误

回答我自己的问题。在这种情况下,我们需要通过如下操作访问子视图:

let nav = segue?.destinationViewController as! UINavigationController
let svc = nav.topViewController as! SearchViewController
svc.toPassSearchKeyword = searchKeyword;

根据Semih的回答,如果您不想使用标识符,也可以这样做,将变量传递给下一个segue:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let nav = segue.destination as? UINavigationController, 
        let vc = nav.topViewController as? TestViewController {
        vc.username = "Test"
    }
}

对于那些研究这个问题的人来说,这只是一个简短的提示,它已被重命名为Destination

let nav = segue.destination as! UINavigationController
let svc = nav.topViewController as! SearchViewController
svc.toPassSearchKeyword = searchKeyword;

当我没有在UIViewController或UINavigationController的接口生成器中设置自定义类时,有时会遇到这种情况。在interface builder中选择项目时,请选中第三个选项卡,并检查设置是否正确。首先,谢谢。但是我在故事板上查看了一下,它似乎指出了正确的类。听起来,如果您要推到navigationController,您可能需要让子viewcontroller您的searchviewcontroller传递一个值。这有意义吗?编辑:对不起,我看到了你的注释代码。那正是我应该做的。我会调查看是否能找到问题。它在appdelegate上抛出了什么错误?我发现了问题。UI中缺少一个映射,可以很好地处理注释代码。还有一个问题,但这个问题现在似乎已经解决了。请将其转换为答案,以便我将其标记为已解决。非常感谢您指出了正确的方向。遇到了相同的问题,但由于我有多个分段,我必须首先检查类的类型。segue.destinationViewController.Is有点像ClassuinAvigationController谢谢!这是目前苹果公司Swift应用程序开发中的一个问题,在第551页,他们要求您将segue.destination降级为!AddEditEmojiTableViewController,忘记了两者之间有一个导航控制器。我注意到这本书的质量在我阅读的过程中变得越来越差,它开始的时候非常稳定,现在它的一些内容在接近尾声时变得有问题了——不管是有意还是无意。这也帮助了我。大多数导游忘记了这一部分@Othyn我在看同一个教程,现在我在这个stackoverflow问题上是因为同一件事:你可以用一种很好的方式来看待它,它教会我们如何解决这些错误。对于像我这样的新手来说,这并不是一件小事,但解决它感觉很好,尽管它可能很简单:P