Почему Обозреватель в NSNotification звонил дважды ....? - PullRequest
5 голосов
/ 25 августа 2009

Если класс является пользовательским классом, после публикации уведомления селектор, соответствующий наблюдателю, вызывается дважды. Есть ли лучшее решение, чтобы селектор вызывался только один раз?

Ответы [ 4 ]

8 голосов
/ 25 августа 2009

Если селектор вызывается дважды, вы, вероятно, зарегистрированы на него дважды.

3 голосов
/ 25 августа 2009

Если класс наблюдателя зарегистрирован для уведомления по имени, но не для определенного объекта, он будет получать несколько сообщений, так как он будет вызываться каждый раз, когда происходит уведомление, независимо от исходного объекта.

Аналогичным образом, если наблюдатель зарегистрирован для определенного объекта, но не для именованного уведомления, он будет передаваться каждый раз при получении уведомления об этом объекте.

Альтернативным механизмом информирования об изменениях в отдаленном состоянии является наблюдение значения ключа - http://developer.apple.com/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html

1 голос
/ 29 сентября 2013

Что сработало для меня, так это пара вещей:

1-В классе, где выполняется регистрационный вызов addObserver, было добавление определенного объекта.

2-В классе, где выполняется вызов postNotification, как объект того же типа.

Я также делаю свой postNotificaiton в вызове dispatchAsync, но это не связано с вашей проблемой.

0 голосов
/ 04 июня 2014

Проверьте, установлен ли addObserver только один раз. В моем случае цикл addObserver выполнялся дважды, поэтому ошибка.

...