【发布时间】:2017-02-17 16:22:25
【问题描述】:
我有一个包含 MyObject 数组的 NSArrayController (itemsController)。这个控制器绑定到一个 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" 有同样的结果。
【问题讨论】:
-
我觉得这很难相信。无法观察对象的 所有 属性。你是如何改变属性的?你收到什么
keyPath和change字典?您是否明确调用-will/didChangeValueForKey:或类似方法?您是否覆盖 KVC 或 KVO 方法(例如-setValue:forKey:)?数组控制器是在做过滤还是排序?automaticallyRearrangesObjects是否启用?顺便说一句,毫无疑问:您应该通过selection和 notselectedObjects进行绑定。
标签: key-value-observing nsarraycontroller