2011-10-21 66 views
1

假设我有一个Player实例,并且我想添加一个观察者到他们的分数,所以我可以更新iOS应用程序中的分数显示。我相信我应该调用看起来像这样添加观察者的方法:如何调试NSObject观察者?

[[self.game player] addObserver:self 
        forKeyPath:@"score" 
         options:NSKeyValueObservingOptionNew 
         context:nil]; 

在同一个班级,那我也定义了一种方法,应该收到此消息:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 

然而,我放在这个方法中的断点永远不会被击中。

我想知道如何诊断此问题。我已经验证玩家实例已经填充,并且当分数更新时,同一个实例被更新。

如果有帮助,我刚刚将我的项目转换为ARC,但上面的代码是新的,并且从未工作过。

回答

1

您的关键路径“分数”不符合KVO标准(您是不是为*分数定义@property?)或者添加观察者方法永远不会被调用。您可以通过在您的第一个代码段中的代码行中放置一个断点并验证观察者确实正在注册来轻松诊断后者。

+0

我调用[[self.game player] valueForKey:@“score”],因此返回零,所以我猜测我的应用程序有其他错误。感谢您的时间,我怀疑我已经浪费了。 –

+0

好的,事实证明,viewDidLoad在didFinishLaunchingWithOptions之前执行,所以我依赖于当时没有的东西。在这里,无论如何都要有一些声誉。 –