2017-05-02 142 views
-1

尝试将视图控制器中的值设置为另一个视图控制器。呈现视图控制器错误

userAvatar = (presentingViewController as! OptionsPageViewController).newAvatar 

获取错误: “致命错误:意外地发现零而展开的可选值” 和错误: “线程1:EXC_BAD_INSTRUCTION(代码= EXC_1386_INVOP,子码=为0x0)”

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

回答

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是一个可选的和尼尔斯正在其它地方进行处理:

userAvatar = (presentingViewController as? OptionsPageViewController)?.newAvatar 

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

如果你是100%肯定,这应该OptionsPageViewController,仔细检查任何代码的供应值,以确保它被正确初始化(但你还是应该拆开包装得当不管)。