3

问候,我是可可初学者,这是我的第一篇文章: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 ,我只想在这个值发生变化时得到通知,任何其他建议也将不胜感激。我指望你,请帮助我,谢谢:)

4

1 回答 1

1

怎么样:

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

但是,如果您真的想让您的对象符合 KVC(这是您尝试使用的),您需要遵循Apple关于该主题的指南:

为了让一个类被认为是对特定属性的 KVC 兼容,它必须实现 valueForKey: 和 setValue:forKey: 所需的方法才能为该属性工作。

于 2012-12-04T13:39:23.930 回答