2009-06-23 7 views
7

मैं विधि प्रक्रिया में dict पास करना चाहता हूं। लेकिन एक बार जब मैं शब्दकोश तक पहुंच जाता हूं, तो मुझे EXC__BAD_INSTRUCTION मिलता है।NSNotificationCenter के साथ parametrized विधि का उपयोग कैसे करें?

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

प्राप्तकर्ता विधि में:

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

मैं गलत क्या कर रही हूं पर कोई सुझाव?

उत्तर

17

आपको एनएसएनोटेशन ऑब्जेक्ट प्राप्त होगा, अधिसूचना कॉलबैक में एनएस डिक्शनरी नहीं।

इस प्रयास करें:

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

Amrox बिल्कुल सही है। अपने postNotificationName

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

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

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

इस मामले में:

एक भी नीचे के रूप में उसी के लिए ऑब्जेक्ट (userInfo के बजाय) का उपयोग कर सकते वस्तु की तरह दिखेगा:

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

धन्यवाद एड्रियन कोड अपडेट करने के लिए धन्यवाद। अगली बार मैं प्रारूपण का भी ख्याल रखूंगा। :) –

0

आप एक NSNotification प्राप्त होगा ऑब्जेक्ट, अधिसूचना कॉलबैक में NSDictionary नहीं।

  • (शून्य) processit: (NSNotification *) नोट {

    NSDictionary dict = (NSDictionary) note.object;

    एनएसएसटींग * परीक्षण = [dict valueForKey: @ "l"];

    एनएसएलओजी (@ "आउटपुट% @", परीक्षण); }