关键值观察和NSButton状态

时间:2010-07-11 08:47:39

标签: cocoa key-value-observing nsbutton

我正在尝试观察复选框状态,并在复选框状态更改时在应用中进行适当的更改。在使用复选框管理窗口的窗口管理器中,我有以下观察者设置:

- (void)awakeFromNib
{
  [myCheckBox addObserver:self 
                  forKeyPath:@"state" 
                     options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) 
                     context:NULL];
}

- (void)dealloc
{
  [myCheckBox removeObserver:self forKeyPath:@"state"];
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
  NSLog(@"KeyPath: %@", keyPath);
  NSLog(@"ofObject: %@", object);
  NSLog(@"change: %@", change);
}

我还将myCheckBox连接到文件所有者(窗口控制器)到窗口中的相应复选框。但是,当我运行我的应用程序observeValueForKeyPath:ofObject:change:context:时,永远不会调用方法。

我做错了什么?

2 个答案:

答案 0 :(得分:8)

-awakeFromNib中检查myCheckbox是否为零。如果它为零,那么它在IB中没有正确连接。

编辑:

正确的密钥路径是“cell.state”。

答案 1 :(得分:2)

除非记录为符合Key Value Observing,否则您不应期望给定类的访问者实现KVO支持。

按钮确实实现了键值绑定,因此您可以将一个布尔属性绑定到按钮的值绑定,而不是观察state属性。