как остановить AVAudioPlayer безопасно - PullRequest
0 голосов
/ 11 декабря 2011

У меня есть 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: -)

1 Ответ

2 голосов
/ 12 декабря 2011

Ваш код, похоже, устанавливает локальный параметр player на nil вместо переменной экземпляра объекта monPlayer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...