2015-09-02 72 views
0

出於某種原因,Xcode是投擲時,我的代碼運行錯誤,說斯威夫特 - 意外發現零而展開的可選值

"Fatal error: unexpectedly found nil while unwrapping an Optional value".

唯一的問題是我在這行代碼展開什麼它說造成了錯誤。 AVAudioPlayer是一個類,而不是一個變量,因此不能是可選的。

代碼:

import UIKit 
import AVFoundation 
class FirstViewController: UIViewController { 
    var label = AVAudioPlayer() 
    var someSounds = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("EvilLaugh", ofType: "mp3")!) 
    @IBAction func activation(sender: UIButton) { 
     label = AVAudioPlayer(contentsOfURL: someSounds, error: nil) // This is where Xcode is throwing an error 
     label.prepareToPlay() 
     label.play() 

編輯:之前問這個問題它並沒有解決我的問題,我做的第一件可能重複確認問題,但第二個我之前沒有發現。請隨時刪除此問題。

+0

的可能重複[致命錯誤:意外發現零而展開的可選值(HTTP:// stackoverflow.com/questions/24643522/fatal-error-unexpectedly-found-nil-while-unwrapping-an-optional-values) –

+0

someSounds可能會返回零,因爲它找不到EvilLaugh的pathForResourcle – Yarneo

+0

可能的重複[什麼是「致命錯誤:意外地發現零,而展開一個可選值「的意思?](http://stackoverflow.com/questions/32170456/what-does-fatal-error-unexpectedly-found-nil-while-unwrapping-an- ptional-VALU) – jtbandes

回答

2

根據NSURL Class ReferencefileURLWithPath:返回一個可選值。當初始化AVAudioPlayer時,url參數首先被解包,在你的情況下,url是nil,應用程序崩潰。

爲了解決這個問題,您需要更改喜歡你IBAction爲代碼:

@IBAction func activation(sender: UIButton) 
{ 
    if let someSounds = someSounds 
    { 
     label = AVAudioPlayer(contentsOfURL: someSounds, error: nil) // This is where Xcode is throwing an error 
     label.prepareToPlay() 
     label.play() 
    } 
} 
1

initalizing的somesounds變量實際上當你展開可選:

var someSounds = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("EvilLaugh", ofType: "mp3")!) 

所以someSounds變量在運行時可能爲零。

然後使用你傳遞這個零值AvaudioPlayer初始化的時候,因此RuntimeError:

AVAudioPlayer(contentsOfURL: someSounds, error: nil) 
相關問題