无法在popViewControllerAnimated上解包可选

时间:2014-07-04 08:54:23

标签: ios swift

我知道错误Can't unwrap optional意味着程序试图解开一个nil变量。麻烦是我无法弄清楚在哪里。

我正在编写一个以模态方式呈现的编辑屏幕。用户更改了内容,将其保存,然后返回到显示更新对象的“详细信息”屏幕。

我正在使用我的第二个VC,我在整个地方都有断点并且在线路上触发了崩溃

self.navigationController.popViewControllerAnimated(true)

我在VC中有断点我正在返回并且没有运行代码,所以我无法理解程序试图打开哪个可选项。

有什么想法吗?

编辑:这与VC有什么关系我还没有被解除分配?

3 个答案:

答案 0 :(得分:2)

而且,您的原始问题是self.navigationControllernil,因此您尝试访问它时会崩溃。如果你以模态方式呈现,你也可以这样忽略:

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可以解雇它。