我试图观察复选框状态并在复选框状态更改时在应用程序中进行适当更改。在管理与复选框窗口中的窗口管理器我有以下观察员设置:键值观察和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:
方法从未被调用。
我在做什么错?
它不是零。它给了我NSButton的实例。当nib中的所有对象都被解除存档并且它们的连接已经建立时,awakeFromNib被调用。 – Eimantas 2010-07-11 15:35:44
即使cell.state似乎可以正常工作,我也不认为NSButtonCell在任何情况下均被记录为符合KVO的“状态”。 NSCell可以通过许多访问器来表示值:setObjectValue :, setStringValue:,setIntegerValue :, setState:...观察integerValue和修改objectValue不会导致KVO通知,但是integerValue已经改变。 – 2010-07-11 18:28:36
是的,好像看起来关键路径是错误的。谢谢! – Eimantas 2010-07-11 18:53:15