iOS 5 AVAudioPlayer - как правильно остановить воспроизведение?

Я использую iOS 5 с включенной ARC. Я проигрываю запись, связанную с определенным видом, когда он отображается. Когда пользователь меняет представление, воспроизведение останавливается. Я использовал NSNotification для вызова метода -stopPlayback, который работает нормально. Проблема в том, что когда пользователь возвращается к исходному виду и нажимает на него, он продолжается там, где остановилась запись.

С отключенной ARC я мог бы использовать следующий код:

-stopPlayback
{
 if([audioPlayer isPlaying])
 {
 [audioPlayer stop];
 [audioPlayer release];
 audioPlayer = nil;
 }
}

Так как ARC не разрешает [выпуск аудио-проигрывателя], я не могу сбросить воспроизведение с самого начала. Я удалил [выпуск аудио-проигрывателя] и audioPlayer=nil; так как ARC будет обрабатывать его, и результатом будет воспроизведение записи там, где она остановилась после предыдущей остановки Я не вижу хороших примеров или документации от Apple о том, как перезапустить запись с самого начала, когда происходит воспроизведение. Каков наилучший способ продолжить?

2 ответа

Решение

Это решение, которое я придумал:

-stopPlayback{  
 if([audioPlayer isPlaying])
 {
   [audioPlayer stop];
   audioPlayer.currentTime=0;
 }
}

Запись теперь воспроизводится с самого начала, независимо от того, когда она была остановлена. Я попытался использовать [пауза audioPlayer] вместо [audioPlayer stop], из-за чего воспроизведение не воспроизводилось после начальной паузы. Похожая вещь произошла, когда я добавил 'audioPlayer=nil; (хотя я не документировал точную комбинацию). Связанный вопрос, опубликованный как часть ответа, использовал currentTime=0, но остальная часть кода не соответствовала моим потребностям. Кто-нибудь может понять, почему это не сработает? Любые дальнейшие комментарии приветствуются.

Вам все еще нужна настройка для nil:

if([audioPlayer isPlaying])
{
    [audioPlayer stop];
    audioPlayer = nil;
}
Другие вопросы по тегам