2014-01-29 127 views
0

在(文件:Sound.m /方法:setSound)我有這個,它成功地設置和播放聲音(看起來)。@property不會持續?,聲音不播放

[self setTheSound:&thisSoundID]; 
    AudioServicesPlaySystemSound(*(self.TheSound)); 

但是,在外部調用該方法時。我什麼都沒聽到。雖然我知道它是從NSLog調用的。 (文件:Sound.m /法:playSound)

- (void) playSound 
{ 
    NSLog(@"Called playSound"); 
    AudioServicesPlaySystemSound(*(self.TheSound)); 
} 

這裏是屬性設置上(文件:Sound.h /法:playSound)

@property SystemSoundID *TheSound; 
+1

你可以添加'setTheSound的實現:'? –

回答

4

你不應該存儲地址聲音ID但在該屬性的聲音ID本身 的(即,刪除該*):

@property SystemSoundID theSound; 

,然後使用它作爲

[self setTheSound:thisSoundID]; 
AudioServicesPlaySystemSound(self.theSound); 

在你的情況,self.theSound局部變量thisSoundID的地址。 一旦你聲明瞭這個變量被聲明的那個函數,那個內存地址可能會被重新用於別的東西,並且指向它是「未定義的 行爲」。

(旁註:實例變量和屬性,使用的名稱開頭的 小寫字母)

+0

再次歡呼馬丁。 –