audioPlayerDidFinishPlaying не вызывается во время прокрутки UITableView - PullRequest
1 голос
/ 14 июня 2010

Одним из моих представлений является UITableView, который выступает в качестве делегата для AVAudioPlayer, и эта таблица, по сути, воспроизводит звуки, когда вы выбираете определенную строку с опциями для повторения звука после его завершения воспроизведения.

Однако я заметил, что если я выберу ячейку с повторным включением для определенного звука, а затем прокрутите UITableView, чтобы выбрать другой звук, он не будет вызывать audioPlayerDidFinishPlaying (и, следовательно, не повторяться)до тех пор, пока прокрутка не остановится.Как только я перестаю прокручивать, он просто повторяется.Или, если я вообще не прокручиваю, это просто повторяется.

Что может произойти во время прокрутки, что UITableView больше не действует как делегат и не вызывает audioPlayerDidFinishPlaying?Есть мысли?

1 Ответ

2 голосов
/ 14 июня 2010

Несмотря на то, что в документации не было четко указано, я подозреваю, что вызов audioPlayerDidFinishPlaying откладывается в главном потоке (выделено мной жирным шрифтом):

Класс AVAudioPlayer позволяет вам играть звук в любом аудиоформате, доступном в iPhone OS. Вы используете делегата для обрабатывать прерывания (такие как входящий телефонный звонок) и обновить пользовательский интерфейс, когда звук имеет закончил играть . Методы делегата для класса AVAudioPlayer являются описано в AVAudioPlayerDelegate Ссылка на протокол.

Пока есть некоторые события для обработки, например, события прокрутки, вызов ожидает в основном потоке.

...