尝试播放音频但继续接收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()
}
}
答案 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
。