我知道错误Can't unwrap optional
意味着程序试图解开一个nil变量。麻烦是我无法弄清楚在哪里。
我正在编写一个以模态方式呈现的编辑屏幕。用户更改了内容,将其保存,然后返回到显示更新对象的“详细信息”屏幕。
我正在使用我的第二个VC,我在整个地方都有断点并且在线路上触发了崩溃
self.navigationController.popViewControllerAnimated(true)
我在VC中有断点我正在返回并且没有运行代码,所以我无法理解程序试图打开哪个可选项。
有什么想法吗?
编辑:这与VC有什么关系我还没有被解除分配?
答案 0 :(得分:2)
而且,您的原始问题是self.navigationController
是nil
,因此您尝试访问它时会崩溃。如果你以模态方式呈现,你也可以这样忽略:
self.presentingViewController.dismissViewController(true)
为了使它始终有效,你可以这样做:
if self.navigationController {
self.navigationController.popViewControllerAnimated(true)
}
else if self.presentingViewController {
self.presentingViewController.dismissViewController(true)
}
else {
// Unknown presentation
}
答案 1 :(得分:1)
let segueLabel = self.storyboard!.instantiateViewControllerWithIdentifier("LabelViewController") as! LabelViewController
let segueGeluid = self.storyboard!.instantiateViewControllerWithIdentifier("SoundViewController") as! SoundViewController
if (indexPath.row == 0) {
self.navigationController?.pushViewController(segueLabel, animated: true)
}
else if (indexPath.row == 2) {
self.navigationController?.pushViewController(segueGeluid, animated: true)
}
在navigationController上使用pushViewController时,navigationController会推送新的ViewController。导航将存在。我认为这是最好的解决方案。 使用以下代码,您可以轻松返回到之前的ViewController:
self.navigationController?.popViewControllerAnimated(true)
答案 2 :(得分:0)
想出来。我用错了方法来解除控制器。它是模态呈现的,所以它没有响应popViewControllerAnimated
- 我需要实现一个协议和委托模式,以便主VC可以解雇它。