呈现视图控制器错误
问题描述:
尝试将视图控制器中的值设置为另一个视图控制器。呈现视图控制器错误
userAvatar = (presentingViewController as! OptionsPageViewController).newAvatar
获取错误: “致命错误:意外地发现零而展开的可选值” 和错误: “线程1:EXC_BAD_INSTRUCTION(代码= EXC_1386_INVOP,子码=为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
是一个可选的和尼尔斯正在其它地方进行处理:
userAvatar = (presentingViewController as? OptionsPageViewController)?.newAvatar
一般而言,你几乎从不想强制解开任何东西。唯一一次你应该使用它是,如果你绝对100%肯定它永远不会是零/错误的类型/等,即使如此,你应该三思而后行。
如果你是100%肯定,这应该是OptionsPageViewController
,仔细检查任何代码的供应值,以确保它被正确初始化(但你还是应该拆开包装得当不管)。