【发布时间】:2016-03-20 01:01:38
【问题描述】:
我正在尝试使用 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
【问题讨论】:
-
你能告诉我这条线 activePlayer.center = levelButtons[index].center
-
设置异常断点。查看哪条线路有问题。看看什么是零。找出原因。
-
你好。 activePlayer 是 UIImageView 而 levelButtons 是 UIImageView 数组。像这样声明: var activePlayer: UIImageView!和 var levelButtons: [UIImageView!] = []
-
我发现错误在哪里。我有两个segue。第一个 GameViewController 到 DiceViewController,第二个从 DiceViewController 到 GameViewController。我在 GameViewController 中有一些初始设置,当我从 DiceViewController 切换回来时,它会创建一个新的 GameViewController 实例,这就是我收到此错误的原因。有什么办法可以返回到旧的 GameViewController 实例?