Что такое параметр "объект" в NSNotification addObserver :?
Один из моих классов с именем Message.m публикует уведомление с объектом sentObject
, как показано ниже
NSDictionary *sentObject = [NSDictionary dictionaryWithObjectsAndKeys:draftData.arr,@"data", nil];
//Post notification to inform a receiver to reload data
[[NSNotificationCenter defaultCenter] postNotificationName:@"reloadDuringSave" object:self userInfo:sentObject];
DraftData.m будет получателем для получения уведомления следующим образом
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(dataReloaded:)
name:@"reloadDuringSave"
object:nil];
Для отправки уведомления userInfo
может быть nil
или может быть object
(например, sentObject
как тип NSDictionary
в этом примере).
Вопрос:
Каковы другие параметры для object
в методе addObserver
? Могут ли они быть
что-нибудь кроме nil
, и если да, то что?
Ответы
Ответ 1
Этот параметр "object" для "addObserver" является необязательным фильтром filter. После публикации уведомления вы можете установить объект для отправителя уведомления, и тогда вы будете уведомлены только о событиях этого отправителя. Если установлено значение "ноль", вы будете получать все уведомления этого типа (независимо от того, кто их отправил).
Ответ 2
Вы можете использовать его для передачи любого объекта с уведомлением. Получатель уведомления затем сможет получить доступ к этому объекту. Например, вы можете реализовать dataReloaded
следующим образом:
- (void)dataReloaded:(NSNotification *)notification {
NSLog(@"%@", notification.object); // this will log the object you passed in addObserver:selector:name:object:
}
Это может быть полезно, когда вы хотите передать данные с вашим уведомлением, чтобы получатель уведомления мог также использовать эти данные.
Ответ 3
Для всех, кто интересуется документацией на яблоко. Вот что он говорит:
notificationSender
Объект, чьи уведомления, которые наблюдатель хочет получить; то есть, только наблюдатели, отправленные этим отправителем, доставляются наблюдателю. Если вы передаете ноль, центр уведомлений не использует уведомления отправителя, чтобы решить, передавать ли его наблюдателю.