我有一些属性正在发生变化的情况,但我不想通知观察者这一变化。
代码如下所示:
[self.fontColorWell removeObserver:self.toolController forKeyPath:@"color"];
[self.fontColorWell setColor:[self.toolController valueForKey:[self fontColorKeyPath]]];
不幸的是,当第二行执行时,self.toolController
上的观察者(self.fontColorWell
)仍会收到通知。
我很确定我知道为什么会这样,因为KVO
通过运行时子类对观察到的类进行操作,并覆盖被观察的属性以添加didChange
和willChange
消息。 (https://www.mikeash.com/pyblog/friday-qa-2009-01-23.html)
如果我在第二行设置断点,我可以清楚地看到self.fontColorWell的类类型:NSKVONotifying_NSColorWell
。因此,当调用-setColor
时,它仍然在运行时子类上调用,该子类具有通知观察者的重写setter。
但是我认为因为我之前调用了removeObserver
,所以不应该从KVO查找表中删除观察者,因此即使KVO对象通知观察者,我的self.toolController
也不应该收到通知?
我100%知道,当-setColor
被调用时,self.toolController
会立即收到-observeValueForKeyPath...
消息。我也很肯定所有的物品都没有多余的物体悬挂在
我是不是被允许做我想做的事情?或者我是以错误的方式解决这个问题?