Search code examples
iosobjective-cnsnotification

Send NSNotification from AppDelegate


I want to send an NSNotification from this method (when the UIButton is clicked) in my AppDelegate.m:

- (void)alertView:(UIAlertView *)alertView 
        clickedButtonAtIndex:(NSInteger)buttonIndex{

if (buttonIndex == 0){
    //cancel clicked ...do your action
    // HERE
}
}

..and receive it in one of my UIViewControllers. How can I do that?

EDIT WITH MORE INFO: I am making an alarm app, and when the user presses the UIButton, I want to stop the alarm. I figured that NSNotifications is the only way to get information from my AppDelegate.m file to a ViewController.m file?


Solution

  • You should to register your receiver object to accept some messages sent from Notification Center.

    Suppose you have Obj A which controls your alarm, and value "stopAlarm" is the message which can stop alarm. You should create an observer for a "stopAlarm" message.

    You can do, with:

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

    Now, you should create a method controller that manages this messages:

     - (void)controller:(NSNotification *) notification {
    
         if ([[notification name] isEqualToString:@"stopAlarm"]){
    
             //Perform stop alarm with A object
         }
      }
    

    Finally, you can send the message "stopAlarm" when you want in the code with:

    [[NSNotificationCenter defaultCenter]
         postNotificationName:@"stopAlarm"
         object:nil];
    

    I Hope this may help.

    EDIT:

    When your UIViewController are unloaded or when app terminate, you should call:

        [[NSNotificationCenter defaultCenter] removeObserver:self];
    

    for stop observing. That's all.

    Thanks to Hot licks for correction.