prepareForSegue 出错“”在展开可选值时意外发现 nil“”
Posted
技术标签:
【中文标题】prepareForSegue 出错“”在展开可选值时意外发现 nil“”【英文标题】:Error with prepareForSegue “”unexpectedly found nil while unwrapping an Optional value“” 【发布时间】: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 实例? 【参考方案1】:您可以通过使用 if let 语句安全地展开 levelButtons[index].center 来防止崩溃。
if let centreA = levelButtons[index].center
activePlayer.center = centreA
你需要调试为什么你会得到 nil。 希望对你有帮助
【讨论】:
【参考方案2】:我实现了 unwind segue。现在我可以返回到我的旧 GameViewController 实例,它解决了问题。
【讨论】:
以上是关于prepareForSegue 出错“”在展开可选值时意外发现 nil“”的主要内容,如果未能解决你的问题,请参考以下文章
ActivityIndicator(微调器)出现错误在展开可选值时意外发现 nil
从 prepareForSegue:sender 设置 UITableView 委托和数据源时出错: