在打开一个Optional值时,意外发现“forForForgue”错误“”

时间:2016-03-20 01:01:38

标签: ios swift

我尝试使用prepareForSegue函数将数据从一个视图控制器传递到下一个视图控制器。 当我运行应用程序并单击按钮时,我的应用程序崩溃,我收到此消息"致命错误:在解开可选值"时意外发现nil。我已尝试使用prepareForSegue函数的许多变体来传递数据,但它永远不会出现在下一个视图控制器上。

这是我的代码。第一个视图控制器:

class DiceViewController: UIViewController {

@IBAction func pressed(sender: AnyObject) {

    print("Button pressed")
    performSegueWithIdentifier("fromDice", sender: self)  
}

override func viewDidLoad() {
    super.viewDidLoad()



}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if let hvc = segue.destinationViewController as? GameViewController {
        if let identifier = segue.identifier {
            switch identifier {
                case "fromDice": hvc.moveBy(2)
            default: break
            }
        }
    }
}

第二个视图控制器:

class GameViewController: UIViewController {
override func viewDidLoad() {
    super.viewDidLoad()

}

func moveBy(moveBy: Int) {

    print("move by \(moveBy)")
    var index = moveBy - 1
    activePlayer.center = levelButtons[index].center

   }

}

控制台输出:

按下按钮

移动2

致命错误:在解包可选值时意外发现nil

2 个答案:

答案 0 :(得分:1)

您可以通过使用if let语句安全地展开levelButtons [index] .center来防止崩溃。

if let centreA = levelButtons[index].center{
    activePlayer.center = centreA
}

你需要调试你为什么得到零。 希望它有所帮助

答案 1 :(得分:0)

我实现了解开segue。现在我可以返回到我的旧GameViewController实例,它解决了这个问题。