2010-12-07 7 views
3

Есть ли способ узнать, зарегистрирован ли объект в качестве наблюдателя для конкретного уведомления? В моей реализации я должен добавить и удалить наблюдателей на лету. По какой-то причине возникает случайная проблема, когда слушатель получает дважды одно и то же уведомление. Я знаю, что мне нужно пересмотреть свою кодировку, но мне будет легче исправить, если бы я знал эту информацию. Спасибо.Вопрос NSNotificationCenter

ответ

2

№ Нет. Запросить эту информацию невозможно. Если вам это нужно, вам нужно следить за этим.

+0

Спасибо за ваш ответ. Я сделал тест, зарегистрировав двух наблюдателей с одним и тем же обработчиком в одном и том же объекте, и он называется дважды. Я думал, что центр уведомлений разрешит подобные ситуации. Я попытаюсь отследить это, но я все же думаю, что было бы неплохо, если бы я мог запросить это в центр. Еще раз спасибо. – Jorge 2010-12-07 05:23:08

+0

Существует решение для Хорхе. Как отметил SteveB. См. Другое сообщение: http://stackoverflow.com/questions/4668372/coalescing-while-using-nsnotificationqueue – 2011-06-07 18:53:40

2

Возможно, вы захотите ознакомиться с NSNotificationQueue. Вот обзор от Apple. Похоже, это может помочь вам прекратить получать дубликаты уведомлений:

объекты NSNotificationQueue (или просто очереди уведомлений) выступают в качестве буферов для уведомления центров (экземпляры NSNotificationCenter). В то время как центр уведомлений распределяет уведомление, когда отправил, уведомления, помещенное в очередь может быть отложено до конца текущего прохода цикла выполнения или до цикла выполнения не находится в режиме ожидания. Duplicate Уведомления также могут быть объединены, поэтому отправлено только одно уведомление , хотя несколько уведомлений отправлены . Очередь уведомлений поддерживает уведомления (экземпляры NSNotification) обычно в первом в первом порядке (FIFO). Когда уведомление поднимается к передней части очереди , очередь отправляет его в центр уведомлений , который, в свою очередь, отправляет уведомление всем объектам, зарегистрированным в качестве наблюдателей.

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

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