我試圖觀察複選框狀態並在複選框狀態更改時在應用程序中進行適當更改。在管理與複選框窗口中的窗口管理器我有以下觀察員設置:鍵值觀察和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