呈现视图控制器错误

Presenting View Controller Error

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

userAvatar = (presentingViewController as! OptionsPageViewController).newAvatar

收到错误:"fatal error: unexpectedly found nil while unwrapping an Optional value" 和错误:"Thread 1: EXC_BAD_INSTRUCTION (code=EXC_1386_INVOP, subcode=0x0)"

这是我被教导从其他视图控制器获取数据的方式。由于某种原因,它现在无法正常工作

您从 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% 确定它永远不会 nil/the 错误 type/etc 时你才应该使用它,即使那样你也应该三思而后行。

如果您 100% 确定它应该 是一个 OptionsPageViewController,请仔细检查提供该值的任何代码以确保它被正确初始化(但无论如何你仍然应该正确地打开它。