2013-02-06 13 views
11

मैं के रूप में परिभाषित "dateTime" मेरे शब्दकोश में जोड़ने के लिए कोशिश कर रहा हूँ करने के लिए भेजा इस प्रकार है:[__NSDictionaryI setObject: forKey:]: गैर मान्यता प्राप्त चयनकर्ता उदाहरण

Symptom Ranking: { 
    5111ef19253b4a9150000000 = 1; 
    5111f029253b4add4e000000 = 1; 
    5111f036253b4a123d000001 = 1; 
    5111f045253b4a404f000000 = 1; 
} 

NSLog(@"date selected: %@", [[self.datePicker date] description]) 

[self.results setObject:[[self.datePicker date] description] forKey:@"dateTime"]; 

एप्लिकेशन क्रैश और मैं इस मिल:

Symptom Tracker[43134:c07] -[__NSDictionaryI setObject:forKey:]: unrecognized selector sent to instance 0x7603990 
2013-02-06 08:15:58.741 Symptom Tracker[43134:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSDictionaryI setObject:forKey:]: unrecognized selector sent to instance 0x7603990' 
*** First throw call stack: 
(0x171b012 0x1428e7e 0x17a64bd 0x170abbc 0x170a94e 0x521e 0x143c705 0x373920 0x3738b8 0x434671 0x434bcf 0x433d38 0x3a333f 0x3a3552 0x3813aa 0x372cf8 0x2652df9 0x2652ad0 0x1690bf5 0x1690962 0x16c1bb6 0x16c0f44 0x16c0e1b 0x26517e3 0x2651668 0x37065c 0x25dd 0x2505) 

उत्तर

31

आपका शब्दकोश अपरिवर्तनीय है - यह NSDictionary है और NSMutableDictionary नहीं है। इसे ठीक करें, और यह ठीक काम करेगा।

7

आप एक NSMutableDictionary उपयोग करने की आवश्यकता - स्टैक ट्रेस आप एक __NSDictionaryI उपयोग कर रहे हैं पता चलता है, (NSDictionary) जो अपरिवर्तनीय है

22

मैं एक बार इस त्रुटि का सामना किया जब मैं गलती से तो जैसे एक copy संपत्ति की घोषणा की:

self.downloadHandlers = [[NSMutableDictionary alloc] init]; 

मैं actu:

@property (nonatomic,copy) NSMutableDictionary* downloadHandlers; 

जब मैं अपने init में ऐसा किया सहयोगी एक अपरिवर्तनीय शब्दकोश मिला। मुझे उम्मीद थी कि एक म्यूटेबल ऑब्जेक्ट पर copy पर कॉल करने से मुझे एक म्यूटेबल ऑब्जेक्ट भी मिलेगा, लेकिन स्पष्ट रूप से नहीं। वैसे भी, copy कीवर्ड को हटा रहा है (जिसे मैंने पहले स्थान पर कभी नहीं बनाया था) समस्या को हल किया।

+0

यह मेरी समस्या थी। धन्यवाद! –

+0

मुझे इस सटीक समस्या का सामना करना पड़ा। धन्यवाद!! – coolcool1994

2

शीर्ष रैंक वाले उत्तर के अनुसार आपको NSDictionary के बजाय NSMutableDictionary का उपयोग करने की आवश्यकता है।

dict[@"key"] = @"new-value"; 
+0

सावधान .. सचमुच [NSDictionary alloc] initWithObjectsAndKeys का उपयोग करके समाप्त होता है, जो शून्य समाप्त हो जाता है ... –

3

यह समस्या समय के सबसे अधिक होता है का उपयोग कर जब हम एक वेब साथ काम कर रहे है कि आप कर सकते हैं फिर से सौंप कुंजी

NSMutableDictionary* dict = [@{@"key": @"value"} mutableCopy]; 

तो: और मामले में आप, शाब्दिक का उपयोग की तरह mutableCopy उपयोग करना चाहते हैं सेवा प्रतिक्रिया क्योंकि प्राप्त डेटा अपरिवर्तनीय है। जब आप अपरिवर्तनीय डेटा को बदलने का प्रयास करते हैं तो एप्लिकेशन निश्चित रूप से क्रैश हो जाएगा। मुझे आशा है कि निम्न कोड स्निपेट मदद करेगा।

NSMutableDictionary *headerData; 

/*Every time you need to allocate memory to the corresponding MutableDictionary variable*/ 

headerData =[[NSMutableDictionary alloc ]initWithDictionary:response[@"Header"]]; 
3

मेरे मामले में मैं एक तेज कोड है कि में मान देता था [AnyHashable: AnyObject] प्रारूप, मैं, NSMutableDictionary करने के लिए इसे परिवर्तित करने के लिए किया था

NSMutableDictionary *logDict = [[NSMutableDictionary alloc]initWithDictionary:[[AnalyticsManager shared]addCommonPropertiesWithProperties:logDict]];

कहाँ के रूप में [[AnalyticsManager साझा] addCommonPropertiesWithProperties: logDict] यह हिस्सा [AnyHashable: AnyObject] प्रारूप में लौटाता है। यह मेरी समस्या तय है।

संबंधित मुद्दे