addObserver: имя

Я использую addObserver примерно так:

[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(notificationReceived:) name:nil object: nil];

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

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"observerName" object:nil];

Проблема в том, что, когда я изменяю свою строку addObserver, чтобы включить имя, чтобы removeObserver знал, какого наблюдателя удалить, уведомления больше не будут вызываться. Эта строка запускается, но игнорируется при добавлении имени:

[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(notificationReceived:) name:@"observerName" object: nil];

Я могу установить имя обратно на ноль, и оно снова работает. Кто-нибудь знает, что я здесь делаю не так?

Спасибо!

1 ответ

Решение

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

name: сообщает системе, какие уведомления вы хотите получать.

self фактический наблюдатель, поэтому, когда вы removeOberserver:self Вы прекратите получать любые уведомления.

Вы должны еще раз внимательно прочитать документацию относительно того, какое значение имеет:

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/Reference/Reference.html#//apple_ref/doc/uid/20000219-SW1

Для примера посмотрите, Как создать класс для отправки и получения событий через NSNotificationCenter в Objective-C?

Другие вопросы по тегам