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