2011-08-04 68 views
0

你能告訴我如何解決這個問題嗎?我想在他們完成比賽時發佈兩個不同的AVAudioPlayer,但分開。不能使用兩個「audioPlayerDidFinishPlaying」

這裏是我的代碼:

.h文件中

@interface ViewController : UIViewController <AVAudioPlayerDelegate> 
{ 
    NSString   *path; 
} 

- (IBAction)Short:(id)sender; 
- (IBAction)BeatLong:(id)sender; 

.m文件

AVAudioPlayer *media; 
AVAudioPlayer *media2; 

- (IBAction)Short:(id)sender 
{ 
    path = [[NSBundle mainBundle] pathForResource:@"Short" ofType:@"wav"]; 
    media = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL]; 
    [media setDelegate:self]; 
    [media play]; 
} 

- (IBAction)Beat:(id)sender 
{ 
    path = [[NSBundle mainBundle] pathForResource:@"Beat" ofType:@"mp3"]; 
    media2 = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL]; 
    [media2 setDelegate:self]; 
    [media2 play]; 
} 

.m

(在新的T打開圖片AB看到它更好^^)

+0

我已經添加了更多的代碼:-) – Aluminum

回答

2

不然,這是對語言的理由是非法的。

你必須根據與消息提交的AVAudioPlayer *指針 來區分不同的球員。

如果你只是想將其釋放,只寫

- (void) audioPlayerDidFinishPlaying:(AVAudioPlayer *)aPlayer successfully:(BOOL)flag 
{ 
    [aPlayer release]; 
} 

就大功告成了非法太多,因爲你沒有自己的aPlayer。

但是一個更好的解決辦法是檢測你自己的哪個音頻播放器和釋放。

- (void) audioPlayerDidFinishPlaying:(AVAudioPlayer *)aPlayer successfully:(BOOL)flag 
{ 
    if (aPlayer == self.media) 
     [self.media release]; 
    else if (aPlayer == self.media2) 
     [self.media2 release]; 
    // other players cannot be released, since we don't know anything about their owner. 
} 
+0

感謝您的回覆,但說的XCode:住宅「媒體」的類型的對象未找到「的ViewController *」 – Aluminum

+2

這是因爲@威茲第二示例代碼假設媒體和媒體2被保留的屬性,這可能是你應該如何實現它們。在你的示例代碼中,它們只是全局變量。 –

+1

是的,這是因爲挽留發佈版的一部分被當你@synthesize它們產生的存取管理輕鬆了許多。 – Wizz

相關問題