2014-01-17 4 views
2

Хорошо, чувствую себя довольно глупо здесь, но по какой-то причине я просто не могу заставить свой объект перестать получать уведомления!Не удается остановить одноразовое уведомление?

У меня есть очень простая настройка в моем методе init:, который должен прослушивать первое уведомление и прекращать прослушивание при первом приеме. Методы init: определенно называются только один раз.

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

[[NSNotificationCenter defaultCenter] addObserverForName:kMyNotification 
                object:nil 
                 queue:nil 
               usingBlock:^(NSNotification *note) 
                  { 

                   [NSLog(@"Got here"); 
                   [[NSNotificationCenter defaultCenter] removeObserver:self 
                               name:kMyNotification 
                              object:nil]; 
                  }]; 

Любые идеи, почему removeObserver:name:object: вызов, кажется, не имеют никакого эффекта?

ответ

4

Попробуйте это:

__block id observer = [[NSNotificationCenter defaultCenter] addObserverForName:kMyNotification 
               object:nil 
                queue:nil 
              usingBlock:^(NSNotification *note) 
                 { 

                  [NSLog(@"Got here"); 
                  [[NSNotificationCenter defaultCenter] removeObserver:observer 
                              name:kMyNotification 
                             object:nil]; 
                 }]; 
+1

Действительно, дело в том, что вам нужно удалить наблюдателя зарегистрирован на основе обратного вызова блока, используя идентификатор возвращается, когда наблюдатель был зарегистрирован. Вы не можете смешивать старые и новые методы добавления/удаления. –

+0

D'oh !!! Спасибо, что указали на это - просто нашли его в документах 5 минут назад: - / – Jay

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