尝试将值从一个视图控制器设置为另一个视图控制器。
userAvatar = (presentingViewController as! OptionsPageViewController).newAvatar
获取错误:"致命错误:在打开可选值时意外发现nil" 和错误:"线程1:EXC_BAD_INSTRUCTION(代码= EXC_1386_INVOP,子代码= 0x0)"
这是我从其他视图控制器获取数据的方式。由于某种原因,它现在还没有工作
答案 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
,请仔细检查提供该值的代码,以确保其正确初始化(但无论如何你都应该妥善解开它。)