iOS:无法将类型NextViewContrller的值转换为UINavigationController

时间:2017-07-19 22:57:35

标签: ios swift3 uinavigationcontroller xcode8

我试图实现navegationController以编程方式在viewcontrollers之间切换:

enter image description here

@IBAction func next(_ sender: Any) {
        self.performSegue(withIdentifier: "next", sender: self)

    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "next"{
            let destNVC = segue.destination as! UINavigationController
            let next = destNVC.topViewController as! NextViewController
            next.title = "next!"
        }
    }

但是我收到了这个错误:

Could not cast value of type 'myProject.NextViewController' (0x108de5338) to 'UINavigationController' (0x10aa2d4a8).

enter image description here

你们中的任何人都知道我为什么会收到这个错误?

我非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

我认为屏幕截图中显示的最右边的VC是您的NextViewController

让我们看看在这种情况下segue.destination是什么。找到segue.destination所指的内容非常容易。查看你的故事板,找到你想要的segue,然后用箭头找到segue的结尾。无论箭头指向哪个VC,都是segue.destination。 (segue的另一端是segue.source btw)

现在我们知道了这一点,我们知道segue.destination在这种情况下必须引用NextViewController。现在您应该意识到应该纠正这一行:

let destNVC = segue.destination as! UINavigationController

好吧,试图将NextViewController投放到UINavigationController肯定会导致错误,不会被错过吗?

事实上,您可以将segue.destination投射到NextViewController

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "next"{
        let next = segue.destination as! NextViewController
        next.title = "next!"
    }
}