Я разрабатываю простое приложение MVC в Какао / Objective-C. У меня странная проблема (или недоразумение) с уведомлениями и KVO.
У меня есть объект AppController в MainMenu.xib, поэтому я реализую метод 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
in AppController
, подключенный к NSImageView
.
В стандартном observeValueForKeyPath:ofObject:change:context
методе я просто регистрирую полученное уведомление.
Проблема в том, что при изменении значения image
на 1020 * я получаю 3 уведомления вместо одного. ты можешь помочь мне с этим? Может я что-то упускаю в настройках или вообще регистрирую наблюдателя?
UPDATE : backgroundImageView
- это экземпляр класса BackgroundImageView
, который является подклассом NSImageView
. Я подклассифицировал последний для обработки операций перетаскивания в качестве места назначения перетаскивания. Когда вызывается performDragOperation:
(последнее «состояние» перетаскивания), оно меняет значение свойства image
на setImage
между willChangeValueForKey
и didChangeValueForKey
.