Can someone please show me an example of a Cocoa Obj-C object, with a custom notification, how to fire it, subscribe to it, and handle it?
68
votes
Vague question. Try asking a more specific question, or search Apple's documentation.
– danielpunkass
I wouldn't normally comment on a question like this, but seeing as how you received a "con" then mine can be a "pro". This question allows for a concise answer dealing strictly with the topic. I merely want to find out one simple thing - not scour apple's documentation (which would most likely be worth-while anyway). So thanks for asking this question. I see your +15 atm on the question being congruent with my sentiment.
– Jacksonkr
Here is a app that i wrote, it might help you github.com/kylelk/Notification-example/tree/master
– kyle k
3 Answers
82
votes
@implementation MyObject
// Posts a MyNotification message whenever called
- (void)notify {
[[NSNotificationCenter defaultCenter] postNotificationName:@"MyNotification" object:self];
}
// Prints a message whenever a MyNotification is received
- (void)handleNotification:(NSNotification*)note {
NSLog(@"Got notified: %@", note);
}
@end
// somewhere else
MyObject *object = [[MyObject alloc] init];
// receive MyNotification events from any object
[[NSNotificationCenter defaultCenter] addObserver:object selector:@selector(handleNotification:) name:@"MyNotification" object:nil];
// create a notification
[object notify];
For more information, see the documentation for NSNotificationCenter.
45
votes
Step 1:
//register to listen for event
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(eventHandler:)
name:@"eventType"
object:nil ];
//event handler when event occurs
-(void)eventHandler: (NSNotification *) notification
{
NSLog(@"event triggered");
}
Step 2:
//trigger event
[[NSNotificationCenter defaultCenter]
postNotificationName:@"eventType"
object:nil ];
6
votes
Make sure to unregister notification (observer) when your object is deallocated. Apple documentation states: "Before an object that is observing notifications is deallocated, it must tell the notification center to stop sending it notifications".
For Local Notifications the next code is applicable:
[[NSNotificationCenter defaultCenter] removeObserver:self];
And for observers of distributed notifications:
[[NSDistributedNotificationCenter defaultCenter] removeObserver:self];