我尝试使用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
答案 0 :(得分:1)
您可以通过使用if let语句安全地展开levelButtons [index] .center来防止崩溃。
if let centreA = levelButtons[index].center{
activePlayer.center = centreA
}
你需要调试你为什么得到零。 希望它有所帮助
答案 1 :(得分:0)
我实现了解开segue。现在我可以返回到我的旧GameViewController实例,它解决了这个问题。