我正在 Cocoa/Objective-C 中开发简单的 MVC 应用程序。我对通知和 KVO 有一个奇怪的问题(或误解)。
我在 MainMenu.xib 中有 AppController 对象,因此我实现awakeFromNib
了注册以NSImageView
更改其image
属性的方法。我通过以下方式添加self
为观察者:
// options:3 equals to new/old passed values in changeDictionary
[backgroundImageView addObserver:self
forKeyPath:@"image"
options:3
context:NULL];
backgroundImageView
是一个连接IBOutlet
到的。AppController
NSImageView
在标准observeValueForKeyPath:ofObject:change:context
方法中,我只记录收到的通知。
问题是 - 当我更改image
值时,NSImageView
我收到 3 个通知而不是 1 个。你能帮我解决这个问题吗?也许我忽略了选项或一般注册观察者中的某些内容?
更新:backgroundImageView
是BackgroundImageView
类的实例,它是NSImageView
. 我将后者子类化为处理拖放操作作为拖动目的地。当performDragOperation:
被调用时(拖动的最后一个“状态”),它会改变image
属性的值setImage
betweenwillChangeValueForKey
和didChangeValueForKey
。