Можно ли проверить, добавлял ли я наблюдателя в NSNotificationCenter раньше?

Как описано в названии.

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


person Andrew Chang    schedule 06.08.2013    source источник


Ответы (1)


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

P.S. Вы дважды пробовали добавить наблюдателя? Ваш селектор также вызывается дважды?

person Stas    schedule 06.08.2013
comment
Да, я дважды добавил и заметил два вызова уведомлений. Однако, если я удаляю наблюдателя, которого не добавлял ранее, возникает ошибка. Похоже, мне нужно добавить переменную BOOL для такой проверки. - person Andrew Chang; 06.08.2013
comment
Это может помочь. Но зачем вам такое поведение? Схема кажется простой - добавьте наблюдателя в viewDidLoad и удалите в viewDidUnload. - person Stas; 06.08.2013
comment
Наблюдатель может быть назначен контроллеру представления до ИЛИ после его загрузки, в зависимости от потребностей пользователя. Я бы добавил наблюдателя, как только все условия будут выполнены в обоих методах. Это может привести к дублированию добавления. - person Andrew Chang; 06.08.2013
comment
Вы можете использовать метод observationInfo из NSObject. - observationInfo Returns a pointer that identifies information about all of the observers that are registered with the receiver. - person Erwan; 14.11.2014
comment
Стас, да, может и нужно такое поведение. Помимо контроллеров представлений, существует множество других объектов, которые, возможно, потребуется зарегистрировать в качестве наблюдателя. - person Alyoshak; 30.10.2018