放松 segue 干扰 shoe segue

Unwind segue interferring with a show segue

我想要实现的目标的背景:

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

所有 doneBarButton 都以 MainViewController 为根,所以我认为无论视图控制器会向 MainViewController 解除什么。

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

"fatal error: unexpectedly found nil while unwrapping an Optional value"

我不完全确定在哪里确定需要修复的地方,无论是在界面构建器中还是在 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
    }
 }

您尚未为 unwind segue 分配 标识符,因此 属性 是 nil .由于您使用 ! 强制展开它,它崩溃了。

要解决此问题,请在 文档大纲 视图中找到 unwind segue。 Select 然后在 Attributes Inspector 中,给 segue 一个标识符。


备选方案:

由于您可能不关心展开标识符,您也可以通过选择更安全的方式来展开 segue.identifier:

来解决问题
switch segue.identifier ?? "" {

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