呈现视图控制器错误

时间:2017-05-02 22:29:38

标签: swift xcode viewcontroller

尝试将值从一个视图控制器设置为另一个视图控制器。

userAvatar = (presentingViewController as! OptionsPageViewController).newAvatar

获取错误:"致命错误:在打开可选值时意外发现nil" 和错误:"线程1:EXC_BAD_INSTRUCTION(代码= EXC_1386_INVOP,子代码= 0x0)"

这是我从其他视图控制器获取数据的方式。由于某种原因,它现在还没有工作

1 个答案:

答案 0 :(得分:0)

您从as!命令获得该错误。这意味着presentingViewController并不总是OptionsPageViewController,您应该有条件地打开它。要么是这样的:

if let presentingViewController = presentingViewController as? OptionsPageViewController {
    userAvatar = presentingViewController.newAvatar
} else {
    // do something to handle other controller types here
}

guard如果它代表方法中的失败点:

guard let presentingViewController = presentingViewController as? OptionsPageViewController else {
    return
}
userAvatar = presentingViewController.newAvatar
// continue with rest of method

或使用条件链接,如果userAvatar是可选的,并且nils已在其他地方处理:

userAvatar = (presentingViewController as? OptionsPageViewController)?.newAvatar

一般来说,你几乎不想强行打开任何东西。你应该使用它的唯一一次是,如果你绝对100%肯定它永远不会是零/错误类型/等等,即便如此,你应该三思而后行。

如果您100%确定OptionsPageViewController,请仔细检查提供该值的代码,以确保其正确初始化(但无论如何你都应该妥善解开它。)