2015-03-02 54 views
-3

我有一個應用程序(從我以前的帖子中解開nil,我真的很討厭nil),它搜索iTunes商店並以JSON格式返回數據。我有它的工作,它得到歌曲名稱,藝術家的名字,一切!我創建了一個@IBAction按鈕來播放歌曲的預覽。 JSON有一個屬性,它是歌曲預覽的URL。當我按一下按鈕,它執行以下操作:爲什麼我在Swift文件中打開nil?

 let alertSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(url, ofType: "m4a")!) 
     AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil) 
     AVAudioSession.sharedInstance().setActive(true, error: nil) 
     var error:NSError? 
     audioPlayer = AVAudioPlayer(contentsOfURL: alertSound, error: &error) 
     audioPlayer.prepareToPlay() 
     audioPlayer.play() 

url是這樣的:http://a1993.phobos.apple.com/us/r1000/101/Music/b7/b3/e0/mzm.ooahqslp.aac.p.m4a。我知道我的播放音頻文件的設置有效;我有另一個應用程序,我使用完全相同的設置。爲什麼它告訴我,我在這裏打開nilhttp://a1993.phobos.apple.com/us/r1000/101/Music/b7/b3/e0/mzm.ooahqslp.aac.p.m4a?網址是有效的,文件播放。

回答

0

檢查這一行代碼。

let alertSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(url, ofType: "m4a")!) 

fileUrlWithPath要求本地路徑,即您的設備上。

NSBundle.mainBundle().pathForResource(url.....

這個方法返回發送給它的資源的本地路徑。您正在向它發送一個網址,除非您明確地將它放在那裏,否則它不在mainBundle中。所以它返回的路徑是零,因爲沒有滿足你傳遞給它的參數的本地路徑。

+0

我怎樣才能讓它在網上做文件? – 2015-03-02 22:45:54

+0

使用您從JSON獲得的未編輯的路徑(也許您發佈它包含的內容作爲示例) – 2015-03-02 22:59:15

+0

url是http://a1993.phobos.apple.com/us/r1000/101/Music/b7/b3/e0/mzm.ooahqslp.aac.p.m4a',只需用'audioPlayer = AVAudioPlayer(contentsOfUrl:url,error&error)'播放文件'? – 2015-03-02 23:01:37

0

如果你有本地資源,你應該使用一個名爲URLForResource

此行是沒有意義的方法。如果需要,您應該始終喜歡使用網址並從中提取路徑。

替換此行:

let alertSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("fileName", ofType: "m4a")!) // this would crash if not found (nil) 

與代碼

if let alertSoundUrl = NSBundle.mainBundle().URLForResource("fileName", withExtension: "m4a") { 
    println(true) 
} else { 
    println(false) 
} 

此塊如果你需要使用NSURL(字符串:)網絡鏈接。 fileUrlWithPath它僅用於本地資源。

if let checkedUrl = NSURL(string: "http://a1993.phobos.apple.com/us/r1000/101/Music/b7/b3/e0/mzm.ooahqslp.aac.p.m4‌​") { 
    println(true) 
} else { 
    println(false) 
} 
相關問題