2009-06-23 10 views
7

Chciałbym przekazać dyktat procesowi metody. Ale gdy wejdę do słownika, otrzymam EXC__BAD_INSTRUCTION.Jak używać metody sparametryzowanej z NSNotificationCenter?

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]; 

W metodzie odbiorcy:

- (void) processit: (NSDictionary *)name{ 
    NSString *test = [name valueForKey:@"l"]; //EXC_BAD_INSTRUCTION occurs here 
    NSLog(@"output is %@", test); 
} 

Wszelkie sugestie na temat tego, co robię źle?

Odpowiedz

17

Otrzymasz obiekt NSNotification, a nie NSDictionary w powiadomieniu zwrotnym.

Spróbuj tego:

- (void) processit: (NSNotification *)note { 
    NSString *test = [[note userInfo] valueForKey:@"l"]; 
    NSLog(@"output is %@", test); 
} 
2

Amrox ma absolutną rację.

Można również użyć Object (zamiast userinfo) na takie same jak poniżej:

- (void) processit: (NSNotification *)note { 

    NSDictionary *dict = (NSDictionary*)note.object; 

    NSString *test = [dict valueForKey:@"l"]; 
    NSLog(@"output is %@", test); 
} 

W tym przypadku swój postNotificationName: obiekt będzie wyglądać następująco:

[[NSNotificationCenter defaultCenter] postNotificationName:@"atest" object:dict]; 
+0

Dzięki Adrian, aby zaktualizować kod. Zajmę się również formatowaniem od następnego razu. :) –

0

Otrzymasz NSNotification obiekt, a nie NSDictionary w powiadomieniu zwrotnym.

  • (void) processit: (NSNotification *) Uwaga {

    NSDictionary dict = (NSDictionary) note.object;

    NSString * test = [wartość dyktowanaForKey: @ "l"];

    NSLog (@ "wynik to% @", test); }

Powiązane problemy