4thSpace
4thSpace

Reputation: 44352

How to use parametrized method with NSNotificationCenter?

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

Answers (3)

Vara
Vara

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

Kapil Mandlik
Kapil Mandlik

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

amrox
amrox

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

Related Questions