Я следил за документами о том, как настроить и использовать наблюдатель, используя механизм КВО http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html
Это должно быть очень просто.
Я создал объект AVAudioPlayer и хочу отслеживать после каждого изменения его текущего времени.
Я использую этот код для настройки наблюдателя:
[_player addObserver:self forKeyPath:@"currentTime" options:NSKeyValueObservingOptionNew context:NULL];
Этокод для обработки изменений:
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqualToString:@"currentTime"]) {
//Do something
}}
И этот код, когда аудио заканчивается:
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{
// Remove the observation
[_player removeObserver:self forKeyPath:@"currentTime"];}
По какой-то причине наблюдатель не вызывает -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
Я знаю, что могу использовать NSTImer и запускать его, когда начинается воспроизведение звука, но я ищу более плавный способ сделать это.Вместо этого я также могу использовать объект AVPlayer и отслеживать его, используя addPeriodicTimeObserverForInterval:queue:usingBlock:
Но я не хочу терять все преимущества объекта AVAudioPlayer.
Что я делаю неправильно с наблюдателем?У вас есть другое предложение, как использовать AVAudioPlayer и управлять отслеживанием после его свойства currentTime?
Заранее спасибо,