observeValueForKeyPath:为每个属性调用,而不仅仅是被观察的属性

时间:2017-02-17 16:22:25

标签: key-value-observing nsarraycontroller

我有一个NSArrayController(itemsController),它包含一个MyObject数组。该控制器绑定到NSTableView,它有几列,都绑定到不同的属性。

我想在应用程序的其他地方观察其中一个属性。

[[self itemsController] addObserver:self forKeyPath:@"selectedObjects.someProperty" options:NSKeyValueObservingOptionNew context:nil];

在回调中:

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

每当选择中的任何属性发生变化时,我都会被调用,但我只想在所选对象中的someProperty发生变化时被调用。

如果没有真正改变,我怎么能阻止所有这些其他的电话呢?

观察@" selection.someProperty"有相同的结果。

1 个答案:

答案 0 :(得分:1)

selectedObjectsselection发生变化时,您也会收到通知。如果您希望在someProperty更改时收到通知,则必须观察所选对象的someProperty,并在选择更改时删除并添加观察者。

观察班的超级班也可以观察。使用context参数识别您的通知。见Best practices for context parameter in addObserver (KVO)