我正在xcode中创建一个简单的测验应用程序,该应用程序具有介绍,问题和结果视图控制器。当我尝试使用代码中的prepare for segue方法将“QuestionViewController”链接到“ResultsViewController”时,感叹号“as!”关键字未用粉红色突出显示。它为我提供了“线程1:信号SIGABRT”。是的,我之前已经在情节提要中链接了它。

我尝试检查情节提要中标记的标识符,它们看起来不错。这是我正在谈论的代码:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "ResultsSegue" {
        let resultsViewController = segue.destination as! ResultsViewController
        resultsViewController.responses = answersChosen
    }
}

它应该将answersChosen的数据传递给我的resultsViewController,但出现“线程1:信号SIGABRT”错误。就像我说的那样,“!”之后,“as”未像“as”那样以粉红色突出显示。在iBook中,“!”是粉红色的..向我指示某事未正确连接。

同样在控制台中:
Could not cast value of type 'UINavigationController' (0x112186760) to 'CityQuiz.ResultsViewController' (0x10a61e698) 2019-07-01 14:45:35.043824-0400 CityQuiz[29761:429223] Could not cast value of type 'UINavigationController' (0x112186760) to 'CityQuiz.ResultsViewController' (0x10a61e698)
它不是应该说类型转换为“QuestionsViewController”类型的值,而不是“UINavigationController”类型吗?除了实际单击情节提要中的标记,我还应该如何检查其他事物是否正确链接?

编辑#1:原来我有一个额外的导航控制器,但我不知为何。我是新来的,感谢您的回复。我现在收到一些“NSUncaughtKeyException”,但我发现了有关这些错误的其他帖子。

最佳答案

为什么不以编程方式显示视图控制器?它比这种方法简单得多。我认为您遇到的问题是segue“ResultsSegue”已连接到嵌入式导航控制器。而且,您可能不应该像这样强制打开视图控制器。检查可选内容是处理如下所示的更好方法。

if let resultsViewController = segue.destination as? ResultsViewController {
    resultsViewController.responses = answersChosen }

10-06 14:28