3 уведомления вместо одного - PullRequest
0 голосов
/ 15 ноября 2009

Я разрабатываю простое приложение 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.

Ответы [ 3 ]

1 голос
/ 15 ноября 2009

… изменяет значение свойства image с setImage между willChangeValueForKey и didChangeValueForKey.

Когда вы отправляете сообщение доступа, вы получаете уведомления KVO бесплатно с ним. Вам следует удалить сообщения {will,did}ChangeValueForKey:, поскольку они являются причиной как минимум одного из уведомлений о посторонних изменениях.

1 голос
/ 15 ноября 2009

Является ли ваш AppController владельцем файла двух других перьев? Если это так, он также получит сообщение awakeFromNib для каждого из них. MainMenu plus two создает три awakeFromNib сообщения, что означает, что вы добавите себя в качестве наблюдателя три раза.

0 голосов
/ 15 ноября 2009

Кажется, нет никаких очевидных проблем с настройкой наблюдателя.

Посмотрите, как вы обновляете изображение, которое вы видите, может быть, оно изменяется 3 раза?

...