Send and receive messages through NSNotificationCenter in Objective-C? Send and receive messages through NSNotificationCenter in Objective-C? ios ios

Send and receive messages through NSNotificationCenter in Objective-C?


@implementation TestClass- (void) dealloc{    // If you don't remove yourself as an observer, the Notification Center    // will continue to try and send notification objects to the deallocated    // object.    [[NSNotificationCenter defaultCenter] removeObserver:self];    [super dealloc];}- (id) init{    self = [super init];    if (!self) return nil;    // Add this instance of TestClass as an observer of the TestNotification.    // We tell the notification center to inform us of "TestNotification"    // notifications using the receiveTestNotification: selector. By    // specifying object:nil, we tell the notification center that we are not    // interested in who posted the notification. If you provided an actual    // object rather than nil, the notification center will only notify you    // when the notification was posted by that particular object.    [[NSNotificationCenter defaultCenter] addObserver:self        selector:@selector(receiveTestNotification:)         name:@"TestNotification"        object:nil];    return self;}- (void) receiveTestNotification:(NSNotification *) notification{    // [notification name] should always be @"TestNotification"    // unless you use this method for observation of other notifications    // as well.    if ([[notification name] isEqualToString:@"TestNotification"])        NSLog (@"Successfully received the test notification!");}@end

... somewhere else in another class ...

- (void) someMethod{    // All instances of TestClass will be notified    [[NSNotificationCenter defaultCenter]         postNotificationName:@"TestNotification"         object:self];}


To expand upon dreamlax's example... If you want to send data along with the notification

In posting code:

NSDictionary *userInfo = [NSDictionary dictionaryWithObject:myObject forKey:@"someKey"];[[NSNotificationCenter defaultCenter] postNotificationName:                        @"TestNotification" object:nil userInfo:userInfo];

In observing code:

- (void) receiveTestNotification:(NSNotification *) notification {    NSDictionary *userInfo = notification.userInfo;    MyObject *myObject = [userInfo objectForKey:@"someKey"];}


This one helped me:

// Add an observer that will respond to loginComplete[[NSNotificationCenter defaultCenter] addObserver:self                                              selector:@selector(showMainMenu:)                                                  name:@"loginComplete" object:nil];// Post a notification to loginComplete[[NSNotificationCenter defaultCenter] postNotificationName:@"loginComplete" object:nil];// the function specified in the same class where we defined the addObserver- (void)showMainMenu:(NSNotification *)note {    NSLog(@"Received Notification - Someone seems to have logged in"); }

Source:http://www.smipple.net/snippet/Sounden/Simple%20NSNotificationCenter%20example