我有一个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"有相同的结果。
答案 0 :(得分:1)
当selectedObjects
或selection
发生变化时,您也会收到通知。如果您希望在someProperty
更改时收到通知,则必须观察所选对象的someProperty
,并在选择更改时删除并添加观察者。
观察班的超级班也可以观察。使用context
参数识别您的通知。见Best practices for context parameter in addObserver (KVO)