SWIFT 致命错误:在展开可选值 (lldb) 时意外发现 nil

Posted

技术标签:

【中文标题】SWIFT 致命错误:在展开可选值 (lldb) 时意外发现 nil【英文标题】:SWIFT fatal error: unexpectedly found nil while unwrapping an Optional value (lldb) 【发布时间】:2015-04-19 13:57:27 【问题描述】:

我正在尝试运行此快速代码,但它输出以下错误:“致命错误:在展开可选值时意外发现 nil (lldb)”。 这是代码:

 //
//  PlaySoundsViewController.swift
//  Revoice
//
//  Created by Leonardo Barazza on 16/04/15.
//  Copyright (c) 2015 Leonardo Barazza. All rights reserved.
//

import UIKit
import AVFoundation

class PlaySoundsViewController: UIViewController 

    var audioPlayer: AVAudioPlayer!

    override func viewDidLoad() 
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        if var filePath = NSBundle.mainBundle().pathForResource("movie_quote", ofType: "mp3") 
            var filePathUrl = NSURL.fileURLWithPath(filePath)
            audioPlayer = AVAudioPlayer(contentsOfURL: filePathUrl, error: nil)
         else 
            println("the filePath is empty")
        
    

    @IBAction func playSlowly(sender: UIButton) 
        audioPlayer.play()
    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    
    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.
    
    */


你能帮帮我吗?

提前致谢。

【问题讨论】:

您可能想提供更多信息,调试器究竟在哪里中断。并给你错误。通常,在您的代码预期为非 nil 的地方给出 nil。 不要明确解开在任何情况下都可能为零的东西——除非你想崩溃。 fatal error: unexpectedly found nil while unwrapping an Optional value的可能重复 【参考方案1】:

我猜问题出在audioPlayer 属性中:它被定义为隐式展开的AVAudioPlayer 可选,因此无论何时访问它都不能是nil(否则会抛出运行时异常,因为隐式展开) .

问题是你实际上创建了一个实例 (audioPlayer != nil) 只有当filePath != nil。你检查filePath 不为零吗?

顺便说一句,你可以通过使用可选链接来跳过这个问题:

@IBAction func playSlowly(sender: UIButton) 
    if audioPlayer?.play() == nil 
        println("audioPlayer is nil")
    

【讨论】:

【参考方案2】:

从问题上方的代码中,您只创建了一个实例变量 audioPlayer: AVAudioPlayer ,带有感叹号 !

当编译器使用尚未创建的实例时,将显示该错误。 阅读您的代码后,只有一处使用了AVAudioPlayerfunc playSlowly()的实例。但是您没有显示您的调试器信息,我只能猜测audioPlayer.play() 是错误所在的地方。 我认为代码 if var filePath = NSBundle.mainBundle().pathForResource("movie_quote", ofType: "mp3"),导致无法定义audioPlayer的实例。 你应该检查filePath的定义是否正确。

【讨论】:

以上是关于SWIFT 致命错误:在展开可选值 (lldb) 时意外发现 nil的主要内容,如果未能解决你的问题,请参考以下文章

致命错误:在展开可选值 (lldb) 时意外发现 nil

致命错误:在展开可选值 (lldb) 时意外发现 nil

AVCaptureSession 运行时崩溃。致命错误:在展开可选值 (lldb) 时意外发现 nil

命中致命错误:在展开可选值 (lldb) 时意外发现 nil

如何修复:“致命错误:在展开可选值 (lldb) 时意外发现 nil”

Swift 错误致命错误:在展开可选值时意外发现 nil