如何观察像“object.attribute”这样的关键路径

时间:2012-12-04 13:35:40

标签: cocoa avaudioplayer key-value addobserver

问候,我是可可初学者,这是我的第一篇文章:P

我正在尝试制作一个非常简单的节奏游戏但是卡住了,这就是我得到的:

/**** TouchView.h/m ****/
@property AVAudioPlayer *audioPlayer;

[self addObserver:self 
       forKeyPath:@"audioPlayer.currentTime" 
          options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld)
          context:NULL];

//audioPlayer.currentTime's type is NSTimeinterval (double)

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change (NSDictionary *)change context:(void *)context
{
   NSLog(@"action triggered!")
}

哪个不起作用(我已经正确初始化了audioPlayer,它可以播放声音,但当currentTime值改变时却无法捕获)

我用另一个属性“double testNumber”测试这些代码,将其设置为“keyPath”的参数,当我触摸屏幕时将其增加一,然后效果很好。但是我应该怎么做才能观察到audioPlayer.currentTime,我只想在这个值发生变化时得到通知,任何其他建议也将受到赞赏。我指望你,请帮助我,谢谢:)

1 个答案:

答案 0 :(得分:1)

怎么样:

[audioPlayer addObserver:self
              forKeyPath:@"currentTime"
                 options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld)
                 context:NULL];

但是,如果你真的想要你的对象KVC兼容(这是你试图使用的),你需要关注这个主题的Apple's guide

  

为了使某个类符合特定的KVC标准   属性,它必须实现valueForKey所需的方法:和   setValue:forKey:为该属性工作。