我正在尝试观察复选框状态,并在复选框状态更改时在应用中进行适当的更改。在使用复选框管理窗口的窗口管理器中,我有以下观察者设置:
- (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:
时,永远不会调用方法。
我做错了什么?
答案 0 :(得分:8)
在-awakeFromNib
中检查myCheckbox
是否为零。如果它为零,那么它在IB中没有正确连接。
编辑:
正确的密钥路径是“cell.state”。
答案 1 :(得分:2)
除非记录为符合Key Value Observing,否则您不应期望给定类的访问者实现KVO支持。
按钮确实实现了键值绑定,因此您可以将一个布尔属性绑定到按钮的值绑定,而不是观察state属性。