Ios 与表演片段相互干扰的放松片段
我正在努力实现的目标的背景: MainViewController显示TableVC。 我将点击一个单元格以显示详细信息。 通过在TableVC或DetailVC上的导航栏上按一个DonebarbButton来关闭 所有的doneBarButton都以MainViewController为根,因此我认为无论视图控制器将忽略什么,都会以MainViewController为根 我所经历的是在点击我的TableVC的doneBarButton而不是我的DetailVC的doneBarButton时崩溃。因为它们都是通过interface builder生成到MainViewController的,所以我不认为我应该在TableVC的prepareForSegue方法中编写任何代码,但是标识符的开关大小写被突出显示,调试控制台输出 “致命错误:在展开可选值时意外发现nil” 我不完全确定在哪里需要修复,无论是在接口生成器中还是在prepareForSegue方法中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时崩
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合并运算符!我不认为我需要标识符,所以我省略了它,很高兴操作员保持代码干净简洁!