Определить, какой объект отправил уведомление?

#cocoa-touch

#cocoa-touch

Вопрос:

У меня возникли проблемы с определением того, как определить, какой объект отправил уведомление.

Я подписываюсь на уведомление в объекте A:

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receivedNotification:) name=@"ReceivedData" object:nil]
  

Я отправляю уведомление от объекта B:

 [[NSNotificationCenter defaultCenter] postNotificationName:@"ReceivedData" object: self userInfo: dict];
  

Я получаю уведомление в объекте A:

 - (void) receivedNotification: (NSNotification*) notification
{
   // Method is hit fine, notification object contains data.
}
  

Как я могу определить, что именно объект B отправил данные, а не, например, объект C? Мне нужна ссылка на отправителя. Я не хочу добавлять отправителя к передаваемому объекту уведомления, поскольку я указываю отправителя при вызове уведомления в объекте B

Ответ №1:

У NSNotification класса есть метод с именем object, который возвращает объект, связанный с уведомлением. Часто это объект, который отправил это уведомление.

 - (void) receivedNotification: (NSNotification*) notification
{
   ...
   id myObject = [notification object];
   ...
}
  

Комментарии:

1. Это именно то, что я хочу получить. Как мне получить это в получателе моего уведомления? Вы можете видеть в моем вопросе, что класс, отправляющий уведомление, включает object: self .

2. Вызовите object метод для вашего параметра уведомления.

Ответ №2:

Если вы хотите обрабатывать уведомления только из класса B, то вы указываете это как объект (который вы оставили как nil ) при подписке на уведомление.

С помощью nil вы получаете уведомления от всех объектов, которые отправляют это конкретное уведомление.

Редактировать

Вы вызываете, [notification object] чтобы узнать, какой объект отправил уведомление.

Комментарии:

1. Я не хочу ограничивать уведомления только классом B, я хочу идентифицировать отправителя уведомления. Не имеет значения, откуда оно поступает. Мне просто нужна ссылка на объект. Я планирую освободить объект от уведомления.

2. Какой смысл указывать object: self в объекте B, если я не могу получить эту информацию в получателе уведомления?