2012-07-28 49 views
5

我試圖讓要播放的聲音,但是當我代碼:CFURLRef需要一個橋接鑄錯誤

AudioServicesCreateSystemSoundID ((CFURLRef) alertSound, &soundFileObject); 

它引發以下錯誤:Objective-C的指針類型的

演員「 NSURL *」到C指針類型‘CFURLRef’(又名‘常量結構__CFURL *’)需要一個橋接鑄錯誤

我曾經嘗試都兩個以下建議的解決方案:

AudioServicesCreateSystemSoundID ((__bridge CFURLRef) alertSound, &soundFileObject); 

AudioServicesCreateSystemSoundID ((CFURLRef) CFBridgingRetain(alertSound), &soundFileObject); 

但我仍然不能得到聲音播放。

我想問題是:橋接錯誤是聲音沒有播放的原因,還是我應該看看其他地方?

我可以使用SysSound示例代碼播放聲音,我使用的是iOS 6和Xcode 4.5。

感謝您的指點:)

回答

9

演員可能不是聲音是不打的理由:

AudioServicesCreateSystemSoundID ((__bridge CFURLRef) alertSound, &soundFileObject); 

是罰款。

您的錯誤很可能出現在您未向我們顯示的代碼中。一個常見的問題是URL創建錯誤或無效的文件格式。

修改代碼如下:

OSStatus status = AudioServicesCreateSystemSoundID((__bridge CFURLRef)alertSound, &soundFileObject); 
NSLog(@"AudioServicesCreateSystemSoundID status = %ld", status); 

,並檢查你所得到的狀態代碼; parmErr(-50)比較常見,通常表示您的URL爲零。

哦,還有一個想法,你不顯示你在哪裏播放聲音。您確實知道AudioServicesCreateSystemSoundID實際上並未播放聲音。你需要調用:

AudioServicesPlaySystemSound(soundFileObject); 

道歉,如果你已經知道了!

+0

是的,-50。 我的NSURL如下所示: NSURL * alertSound = [[NSBundle mainBundle] URLForResource:@「tap」withExtension:@「aif」]; 而文件「tap.aif」位於我創建的名爲Sounds的組中。 是否有某處需要放置? 非常感謝您的幫助! – robspencer77 2012-07-28 20:06:44

+0

只是爲了確保在調試器或者使用NSLog檢查URL是否爲零。這意味着(正如我認爲你開始懷疑)Xcode不會將你的聲音複製到你的應用程序的包中。您可以嘗試從您的項目中刪除它(僅參考!!!!),然後重新添加它,並再次檢查文件名的拼寫是否正確(可能是.aiff?)。我不認爲你需要把它放在任何特別的地方。我通常會將這些東西放在Xcode創建的「支持文件」組中,但我不認爲這是必需的。 – idz 2012-07-28 20:21:16

+0

啊,明白了!謝謝! :) 不知道爲什麼沒有正確添加在首位。 乾杯,idz! – robspencer77 2012-07-28 20:27:37