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“”的主要内容,如果未能解决你的问题,请参考以下文章

AVAudioRecorder - 展开可选时发现 nil

ActivityIndi​​cator(微调器)出现错误在展开可选值时意外发现 nil

带有 `\(var)` 的字符串会导致“展开可选值”错误

imagePickerController 选择照片时出错

在 quickblox 上上传个人资料图片时 Swift 出错

在 SwiftUI 视图中展开可选