Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 与表演片段相互干扰的放松片段_Ios_Swift_Debugging_Fatal Error_Unwind Segue - Fatal编程技术网

Ios 与表演片段相互干扰的放松片段

Ios 与表演片段相互干扰的放松片段,ios,swift,debugging,fatal-error,unwind-segue,Ios,Swift,Debugging,Fatal Error,Unwind Segue,我正在努力实现的目标的背景: MainViewController显示TableVC。 我将点击一个单元格以显示详细信息。 通过在TableVC或DetailVC上的导航栏上按一个DonebarbButton来关闭 所有的doneBarButton都以MainViewController为根,因此我认为无论视图控制器将忽略什么,都会以MainViewController为根 我所经历的是在点击我的TableVC的doneBarButton而不是我的DetailVC的doneBarButton时崩

我正在努力实现的目标的背景:

MainViewController显示TableVC。 我将点击一个单元格以显示详细信息。 通过在TableVC或DetailVC上的导航栏上按一个DonebarbButton来关闭

所有的doneBarButton都以MainViewController为根,因此我认为无论视图控制器将忽略什么,都会以MainViewController为根

我所经历的是在点击我的TableVC的doneBarButton而不是我的DetailVC的doneBarButton时崩溃。因为它们都是通过interface builder生成到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
    }
 }
您尚未为展开序列分配标识符,因此属性为
nil
。因为您正在使用
强制展开它,它崩溃了

要解决此问题,请在“文档大纲”视图中找到“展开”序列。选择它,然后在属性检查器中,给序列一个标识符


替代解决方案:

由于您可能不关心展开标识符,因此也可以选择一种更安全的方法来展开
segue.identifier

switch segue.identifier ?? "" {

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

哇,太简单了,我真的很喜欢使用nil合并运算符!我不认为我需要标识符,所以我省略了它,很高兴操作员保持代码干净简洁!