【问题标题】:Unwind segue interferring with a show segue放松干扰鞋的segue
【发布时间】:2016-09-24 18:21:18
【问题描述】:

我想要达到的目标的背景:

MainViewController 呈现 TableVC。 我将点击一个单元格来展示一个 DetailVC。 可以通过 TableVC 或 DetailVC 上导航栏上的 doneBarButton 关闭。

所有 doneBarButton 都植根于 MainViewController,所以我认为无论视图控制器如何关闭 MainViewController。

我遇到的是在点击我的 TableVC 的 doneBarButton 而不是我的 DetailVC 的 doneBarButton 时崩溃。因为它们都通过接口构建器植根于 MainViewController,所以我认为我不必在 TableVC 的 prepareForSegue 方法中编写任何代码,但是标识符的开关盒被突出显示并且调试控制台输出

“致命错误:在展开可选值时意外发现 nil”

我不完全确定在哪里确定需要修复的内容,无论是在界面构建器中还是在 prepareForSegue 方法中包含某些内容。

override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
    switch segue.identifier! // Line highlighted with error in debug console
    {
    case "toDetailVC": // Properly presents detailVC through a cell being tapped

    default:
    break
    }
 }

【问题讨论】:

    标签: ios swift debugging fatal-error unwind-segue


    【解决方案1】:

    您还没有为您的展开转场分配一个标识符,所以属性是nil。由于您使用! 强制解包,它会崩溃。

    要解决此问题,请在 Document Outline 视图中找到 unwind segue。选择它,然后在 Attributes Inspector 中,给 segue 一个标识符。


    替代解决方案:

    由于您可能不关心展开标识符,您还可以通过选择一种更安全的方式来解开 segue.identifier 来解决问题:

    switch segue.identifier ?? "" {
    

    这种 nil 合并运算符 ?? 的使用将未分配的标识符替换为空字符串。

    【讨论】:

    • 哇,太简单了,我真的很喜欢 nil 合并运算符的用法!没想到我需要标识符,所以我把它省略了,很高兴操作员保持代码简洁明了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    相关资源
    最近更新 更多