How to pass object with NSNotificationCenter How to pass object with NSNotificationCenter swift swift

How to pass object with NSNotificationCenter


You'll have to use the "userInfo" variant and pass a NSDictionary object that contains the messageTotal integer:

NSDictionary* userInfo = @{@"total": @(messageTotal)};NSNotificationCenter* nc = [NSNotificationCenter defaultCenter];[nc postNotificationName:@"eRXReceived" object:self userInfo:userInfo];

On the receiving end you can access the userInfo dictionary as follows:

-(void) receiveTestNotification:(NSNotification*)notification{    if ([notification.name isEqualToString:@"TestNotification"])    {        NSDictionary* userInfo = notification.userInfo;        NSNumber* total = (NSNumber*)userInfo[@"total"];        NSLog (@"Successfully received test notification! %i", total.intValue);    }}


Building on the solution provided I thought it might be helpful to show an example passing your own custom data object (which I've referenced here as 'message' as per question).

Class A (sender):

YourDataObject *message = [[YourDataObject alloc] init];// set your message propertiesNSDictionary *dict = [NSDictionary dictionaryWithObject:message forKey:@"message"];[[NSNotificationCenter defaultCenter] postNotificationName:@"NotificationMessageEvent" object:nil userInfo:dict];

Class B (receiver):

- (void)viewDidLoad{    [super viewDidLoad];    [[NSNotificationCenter defaultCenter]     addObserver:self selector:@selector(triggerAction:) name:@"NotificationMessageEvent" object:nil];}#pragma mark - Notification-(void) triggerAction:(NSNotification *) notification{    NSDictionary *dict = notification.userInfo;    YourDataObject *message = [dict valueForKey:@"message"];    if (message != nil) {        // do stuff here with your message data    }}


Swift 5

func post() {    NotificationCenter.default.post(name: Notification.Name("SomeNotificationName"),         object: nil,         userInfo:["key0": "value", "key1": 1234])}func addObservers() {    NotificationCenter.default.addObserver(self,         selector: #selector(someMethod),         name: Notification.Name("SomeNotificationName"),         object: nil)}@objc func someMethod(_ notification: Notification) {    let info0 = notification.userInfo?["key0"]    let info1 = notification.userInfo?["key1"]}

Bonus (that you should definitely do!) :

Replace Notification.Name("SomeNotificationName") with .someNotificationName:

extension Notification.Name {    static let someNotificationName = Notification.Name("SomeNotificationName")}

Replace "key0" and "key1" with Notification.Key.key0 and Notification.Key.key1:

extension Notification {  enum Key: String {    case key0    case key1  }}

Why should I definitely do this ? To avoid costly typo errors, enjoy renaming, enjoy find usage etc...