У меня есть AVAudioPlayer с двумя кнопками: Play и Stop.Кнопка воспроизведения скрыта при воспроизведении, и наоборот.
Проблема в том, что происходит сбой при попытке нажать кнопку «Стоп», только в конце воспроизведения, в момент, когда метод «audioPlayerDidFinishPlaying»"вызывается.Действительно, этот метод освобождает AVAudioPlayer, и когда я нажимаю кнопку остановки (которая также освобождает объект ...), он падает.Но все же, я проверяю, есть ли у игрока ноль, прежде чем выпускать его вручную, так почему же происходит сбой и как этого избежать?
Мой код: в .h:
@private AVAudioPlayer* monPlayer;
в.m:
-(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];
}
edit: просто замените локальную переменную "player" на переменную экземпляра "monPlayer" в методе делегата, и это работает.Благодаря hotpaw2: -)