2013-03-17 57 views
-2

播放聲音,我需要在此代碼的幫助,的Objective-C在iPhone上

我想當按下iPhone應用程序的按鈕播放聲音,我得到這個錯誤。 下面是代碼

-(IBAction)playSound:(id)sender{ 
    // NSLog(@"play Sound"); 
    SystemSoundID soundID; 
    NSString *buttonName = [sender currentTitle]; 
    NSString *soundFile = [[NSBundle mainBundle] 
          pathForResource:buttonName ofType:@"wav"]; 
    AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:soundFile], &soundID); 
    AudioServicesPlaySystemSound(soundID); 
    [soundFile release]; 

錯誤消息說

推出是unavialable:在自動引用計數模式下不可

ARC禁止顯式消息 '釋放'

*將Objective-C指針類型「id」轉換爲C指針類型「CFURLRef」(又名「const的結構__CFURL 」)需要一個橋接投

+2

您正在使用ARC,只是刪除[音效檔版本] – 2013-03-17 09:09:05

+0

NSBeep()如何? – Itachi 2013-03-17 14:12:37

回答

2

這個錯誤表示,你必須使用ARC,這樣你就不需要公佈任何對象,因爲它會自動計算其參考。

在你的情況,意見或刪除所有

[OBJ release]; 

具體來說,您需要刪除[soundfile release];

+0

我已經做了修改並刪除了[Soundfile release];但仍然有這** **錯誤** *轉換到C指針類型'CFURLRef'(又名'const struct __CFURL')的Objective-C指針類型'id'的轉換需要橋接轉換*這行代碼有什麼問題? 'AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:soundFile],&soundID);' – 2013-03-18 01:13:31

+0

@ TeddyAble- http://stackoverflow.com/questions/11703923/cfurlref-requires-a-bridged-cast-error此問題是有用的案例...最好的運氣:) – iPatel 2013-03-18 04:20:34

+0

http://stackoverflow.com/questions/15014887/cast-nsurl-to-cfurlref – iPatel 2013-03-18 04:24:58

0

當你在你的項目中使用ARC(自動引用計數),你並不需要釋放任何對象,因爲編譯器會照顧它,如果它適合你。

因此你不需要[soundFile release];

看這個apple document的詳細信息,ARC

+0

請參閱我的評論上面,如果你能幫助將是非常感謝。 – 2013-03-18 01:18:47