2013-07-10 1 views
1
- (IBAction)playOrPauseSound:(id)sender; 
{ 
    [_audioPlayer play]; 
    [[NSNotificationCenter defaultCenter] addObserver:_audioPlayer selector:@selector(nextsong:) name:AVPlayerItemDidPlayToEndTimeNotification object:nil]; 
} 

- (IBAction)nextsong:(id)sender { 
    //code 
} 

ответ

1

Вы должны установить для сервера уведомлений self, поскольку это объект, который действует как наблюдатель. Вы также должны установить уведомление в _audioPlayer, поскольку это объект, который отправляет уведомление AVPlayerItemDidPlayToEndTimeNotification.

Кроме того, метод выбора должен иметь экземпляр NSNotification в качестве единственного аргумента. Так что я был бы соблазн создать отдельный метод для обработки получения уведомлений, которые затем вызывает следующий метод песня, может быть:

- (void)receivedNextSongNotification:(NSNotification *)notification 
{ 
    [self nextsong:nil]; 
} 

Таким образом, в целом, что-то вроде этого:

- (IBAction)playOrPauseSound:(id)sender 
{ 
    [_audioPlayer play]; 
    [[NSNotificationCenter defaultCenter] addObserver: self //will look for the selector in the current class 
              selector: @selector(playerItemDidPlayToEndTime:) 
               name: AVPlayerItemDidPlayToEndTimeNotification 
               object: _audioPlayer]; // the object that sends the notifications 
} 

- (void)playerItemDidPlayToEndTime:(NSNotification *)notification 
{ 
    [self nextsong:nil]; 
} 

- (IBAction)nextsong:(id)sender 
{ 
    //code 
} 

Также убедитесь, для звонка removeObserver:name:object: до self или _audioPlayer освобождается.

Надеюсь, что это поможет.

Смежные вопросы