iOS / Objective-C: NSNotification

У меня есть вопрос, основанный на NSNotification в Objective-C:

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

Я действительно не знаю, как установить атрибут объекта...

Итак, если я хочу получать уведомления только от класса a, как я могу установить для него класс a?

[A class]

а также

[A alloc]

не работает.

Я очень озадачен параметром объекта.

3 ответа

Решение

Если nilтогда вы получите все @"SOME_STRING" уведомления отправлены.

если не nilвы получаете только те, которые относятся к экземпляру, переданному object,

так что... на самом деле это не ассоциация "из класса А", это ассоциация с конкретным экземпляром. когда экземпляры совпадают (наблюдение и публикация), вы получаете уведомление.

С этой информацией вы можете использовать экземпляр objc, возвращенный [A class] как object Параметр для получения интересующих вас уведомлений - выглядит так:

Заметим:

[[NSNotificationCenter defaultCenter] addObserver:self 
                                      selector:@selector(method:)
                                      name:@"SOME_STRING"
                                      object:[A class]];
                                              ^^^^^^^

Сообщение:

[[NSNotificationCenter defaultCenter]
  postNotificationName:@"SOME_STRING" object:[A class]];
                                              ^^^^^^^

Параметр объекта - это объект, который вы хотите наблюдать, вы не можете наблюдать за классом.

Но в вашем методе вы можете проверить класс объекта:

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

- (void)method:(NSNotification*)notif
{
    if ([[notif object] isKindOfClass:[A class]]) {
        //...
    }
}

Для публикации уведомления вы можете использовать метод ниже:-

[[NSNotificationCenter defaultCenter] postNotificationName:@"testNotification" object:[A class]];

Чтобы получить уведомление, сначала добавьте следующий метод в ваш метод viewDidLoad:-

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notifyWhenCalled:) name:@"testNotification" object:[A class]];

Объявите ниже селектор. Это будет вызвано, когда ваше уведомление сработало:-

- (void) notifyWhenCalled:(NSNotification *)notification
{
  if ([[notification object] isKindOfClass:[A class]]) 
  {
    //..... Write your code to do anything.
  }
} 
Другие вопросы по тегам