Reputation: 44352
I'd like to pass dict to the method processit. But once I access the dictionary, I get EXC__BAD_INSTRUCTION.
NSNotificationCenter *ncObserver = [NSNotificationCenter defaultCenter];
[ncObserver addObserver:self selector:@selector(processit:) name:@"atest"
object:nil];
NSDictionary *dict = [[NSDictionary alloc]
initWithObjectsAndKeys:@"testing", @"first", nil];
NSString *test = [dict valueForKey:@"first"];
NSNotificationCenter *ncSubject = [NSNotificationCenter defaultCenter];
[ncSubject postNotificationName:@"atest" object:self userInfo:dict];
In the recipient method:
- (void) processit: (NSDictionary *)name{
NSString *test = [name valueForKey:@"l"]; //EXC_BAD_INSTRUCTION occurs here
NSLog(@"output is %@", test);
}
Any suggestions on what I'm doing wrong?
Upvotes: 7
Views: 5922
Reputation: 989
You will receive an NSNotification object, not an NSDictionary in the notification callback.
(void) processit: (NSNotification *)note {
NSDictionary dict = (NSDictionary)note.object;
NSString *test = [dict valueForKey:@"l"];
NSLog(@"output is %@", test); }
Upvotes: 0
Reputation: 174
Amrox is absolutely right.
One can also use Object (instead of userInfo) for the same as below:
- (void) processit: (NSNotification *)note {
NSDictionary *dict = (NSDictionary*)note.object;
NSString *test = [dict valueForKey:@"l"];
NSLog(@"output is %@", test);
}
In this case your postNotificationName:object will look like:
[[NSNotificationCenter defaultCenter] postNotificationName:@"atest" object:dict];
Upvotes: 2
Reputation: 6247
You will receive an NSNotification object, not an NSDictionary in the notification callback.
Try this:
- (void) processit: (NSNotification *)note {
NSString *test = [[note userInfo] valueForKey:@"l"];
NSLog(@"output is %@", test);
}
Upvotes: 17