尝试在Swift中播放音频时出现致命错误

时间:2015-04-19 14:43:37

标签: swift avaudioplayer

尝试播放音频但继续接收fatal error

  

在解包可选值时意外发现nil

这是我的代码:

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", ofType: "mp3"){
            var filePathURL = NSURL.fileURLWithPath(filePath)
            var audioPlayer = AVAudioPlayer(contentsOfURL: filePathURL!, error: nil)

        }else{
            println("the filePath is empty")
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func playSlowAudio(sender: UIButton) {
        //play sloooowly
        audioPlayer.play()
    }
}

1 个答案:

答案 0 :(得分:0)

看起来var filePathURL = NSURL.fileURLWithPath(filePath)返回nil,包含在Optional中。然后在下一行filePathURL!强制将Optional打开,导致nil并给出您看到的错误。

您应该检查以确保filePath对于您尝试加载的文件是否正确。确保文件位于捆绑包中,并且您正确键入了文件名。在那里设置断点并进行调试可能会有所帮助。

另外,为了更安全,您可能需要更改if语句,以便NSURL.fileURLWithPath(filePath)成为if的一部分:

if let filePath = NSBundle.mainBundle().pathForResource("movie", ofType: "mp3"),
   let filePathURL = NSURL.fileURLWithPath(filePath) {
    var audioPlayer = AVAudioPlayer(contentsOfURL: filePathURL, error: nil)

}else{
    println("the filePath is empty OR the file did not load")
}

另请注意:我使用let而不是var作为if语句中的变量,因此它们是常量。最好尽可能使用let