NSNotification только NSLog работает - PullRequest
0 голосов
/ 31 января 2012

В моем классе X я публикую Уведомление, подобное этому:

[[NSNotificationCenter defaultCenter] addObserver:viewController 
                                             selector:@selector(doThis:) 
                                                 name:@"myNotification" 
                                               object:nil];
    [[NSNotificationCenter defaultCenter] postNotificationName:@"myNotification" object:nil];

В моем классе Y я получаю это так:

- (void) doThis: (NSNotification *) notification {
NSLog(@"It works.");
[uiTextView resignFirstResponder]; }

Консоль показывает сообщение NSLog, но мой UITextView не скрывает свою клавиатуру. (Например, viewDidLoad, resignFirstResponder / становитьсяFirstResponder работает.)

Есть что-нибудь особенное, что мне нужно сделать?

Ответы [ 2 ]

3 голосов
/ 31 января 2012

FWIW, в большинстве, но не во всех случаях, наблюдатели должны добавляться и удаляться самим наблюдателем, а не отдельным объектом.(Что произойдет, если наблюдатель уйдет раньше отдельного объекта и не сможет должным образом удалить наблюдателя? Или наоборот? Это слишком упрощает либо утечку наблюдателей, либо сбой при уведомлениях для освобожденных объектов.)

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

2 голосов
/ 31 января 2012

Как говорит Конрад, наблюдатели должны быть добавлены и удалены сами по себе ...

Используйте лучшие практики для определения имени уведомлений в виде статических констант, например:

static NSString *const kMyNotification = @"myNotification";

Почему?потому что есть риск, что оба @ "myNotification" могут быть двумя разными объектами, и тогда NotificationName будет другим, и вы не получите уведомление.Поскольку я всегда объявляю их как статические константы, у меня никогда не было проблем с NSNotifications.

Затем используйте его следующим образом:

Чтобы зарегистрировать наблюдателя

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

Чтобы опубликовать уведомление

[[NSNotificationCenter defaultCenter] postNotificationName: kMyNotification 
                                                    object: nil];

Чтобы удалить наблюдателя:

[[NSNotificationCenter defaultCenter] removeObserver: self];
...