2017-05-02 176 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,仔細檢查任何代碼的供應值,以確保它被正確初始化(但你還是應該拆開包裝得當不管)。