呈现视图控制器错误
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
,请仔细检查提供该值的任何代码以确保它被正确初始化(但无论如何你仍然应该正确地打开它。
正在尝试将一个值从一个视图控制器设置到另一个。
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
,请仔细检查提供该值的任何代码以确保它被正确初始化(但无论如何你仍然应该正确地打开它。