Почему MPMusicPlayerController MPMusicPlayerControllerPlaybackStateDidChangeNotification вызывается дважды?

Я использую следующий код для воспроизведения песни с устройства. Я добавил уведомление для MPMusicPlayerController, чтобы распознавать состояние проигрывателя.

 self.musicPlayer = [MPMusicPlayerController iPodMusicPlayer]; 
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handlePlaybackStateChanged:) name:MPMusicPlayerControllerPlaybackStateDidChangeNotification object:self.musicPlayer]; 
 [self.musicPlayer beginGeneratingPlaybackNotifications]; 
 [self.musicPlayer setRepeatMode: MPMusicRepeatModeNone];

Следующий метод вызывается дважды, когда музыкальный проигрыватель воспроизводит песню.

 -(void)handlePlaybackStateChanged :(id )notification

Мой вопрос, почему он вызывается дважды? Любая помощь будет оценена.


person The iCoder    schedule 30.01.2014    source источник
comment
Убедитесь, что функция, в которой это находится, не вызывается дважды, и попробуйте зарегистрировать уведомление и добавить точки останова, чтобы выяснить, когда она вызывается.   -  person Jordan    schedule 30.01.2014


Ответы (1)


Я сейчас пытаюсь решить то же самое. Вот что я нашел; handlePlaybackStateChanged вызывается, когда currentPlaybackRate равно 0 (остановлено) или 1 (воспроизведение). При нажатии кнопки nextSong текущая песня останавливается, а затем воспроизводится следующая, таким образом, она срабатывает дважды. Мой код ниже был очищен, и он написан на Swift, но вы должны понять мою точку зрения.

func handle_PlaybackStateChanged(){
    println("handle_PlaybackStateChanged")

    if player.currentPlaybackRate == 0{
        println("playbackStatePause0")
    }else{
        println("playbackStatePause1")
    }
}

Выход между песнями

handle_PlaybackStateChanged
playbackStatePause0
handle_PlaybackStateChanged
playbackStatePause1
person Jim1960    schedule 01.01.2015