Наблюдение ключевого значения и состояние NSButton - PullRequest
3 голосов
/ 11 июля 2010

Я пытаюсь наблюдать за состоянием флажка и вносить соответствующие изменения в приложение при изменении состояния флажка. В диспетчере окон, который управляет окном с флажком, у меня есть следующие настройки наблюдателя:

- (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 ]

8 голосов
/ 11 июля 2010

В -awakeFromNib убедитесь, что myCheckbox не ноль. Если это ноль, то он не подключен должным образом в IB.

Edit:

Правильный путь к ключу - "cell.state".

2 голосов
/ 11 июля 2010

Если не задокументировано, что это соответствует значению ключа, вы не должны ожидать, что средства доступа данного класса реализуют поддержку KVO.

Кнопки реализуют привязку значения ключа, поэтому вместо наблюдения свойства состояния вы можете связатьодин из ваших логических атрибутов для привязки значения кнопки.

...