0
我有一個帶有兩個按鈕的AVAudioPlayer:播放和停止。 播放時隱藏播放按鈕,反之亦然。如何安全地停止AVAudioPlayer
問題是,當我試圖在調用方法「audioPlayerDidFinishPlaying」時嘗試按下停止按鈕時,就在播放結束時發生崩潰。 的確,這個方法釋放AVAudioPlayer,當我按下停止按鈕(釋放對象的時候...)它崩潰了。 但是,我仍然測試如果玩家在手動釋放之前是否爲零,那爲什麼它會崩潰以及如何避免這種情況?
我的代碼: 在.H:
-(IBAction)playSound{
NSString *path = nil;
if(path = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"sounds/%d", idoiseau] ofType:@"m4a"])
{
monPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
monPlayer.delegate = self;
[monPlayer play];
[buttonPlay setEnabled:NO];
[buttonStop setEnabled:YES];
}
else return;
}
-(IBAction)stopSound{
if(!monPlayer) return;
[monPlayer stop];
[monPlayer release];
monPlayer = nil;
[buttonPlay setEnabled:YES];
[buttonStop setEnabled:NO];
}
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag {
[player release];
player = nil;
[buttonPlay setEnabled:YES];
[buttonStop setEnabled:NO];
}
編輯:只需更換局部變量 「玩家」 通過在實例變量 「monPlayer」
@private AVAudioPlayer* monPlayer;
在.M
委託方法,它的工作原理。感謝hotpaw2 :-)
Ho ho ...你完全正確:現在它的工作原理是通過用實例變量替換局部變量。謝謝 ! – Chrysotribax