2009-08-25 2 views
5

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

ответ

3

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

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

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

8

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

+0

Проблема заключается в том, что в наконечнике имеется два элемента управления, который настроен на один и тот же класс. и поскольку наблюдатель зарегистрирован в awakeFromNib() этого класса, селектор также вызывается дважды для одного postNotification. :( –

1

То, что сработало для меня было несколько вещей:

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

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

Я также делаю свое сообщениеNotificaiton в диспетчерском вызове Async, но это не связано с вашей проблемой.

0

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

Смежные вопросы