2012-10-26 18 views
10

पर मौजूद है या नहीं, मैं कैसे सत्यापित करूं कि NSDictionary पर कोई कुंजी मौजूद है या नहीं?कोको/उद्देश्य-सी - सत्यापित करें कि कोई कुंजी NSDictionary

मुझे पता है कि इसमें कुछ सामग्री है या नहीं, लेकिन मैं बहुत कुछ चाहता हूं, क्योंकि यह गतिशील है और मुझे इसे रोकना है। कुछ मामलों में यह "नाम" के साथ एक कुंजी हो सकती है और मूल्य है, लेकिन अन्य मामलों में यह हो सकता है कि मूल्य की यह जोड़ी मौजूद नहीं है।

उत्तर

17

सबसे आसान तरीका है:

[dictionary objectForKey:@"key"] != nil 

रूप शब्दकोशों लौट गैर existant चाबी के लिए nil (और इसलिए आप एक शब्दकोश में एक शून्य की दुकान नहीं कर सकते हैं, उसके लिए आपको NSNull उपयोग करें)।

संपादित करें: ब्राडली जवाब पर टिप्पणी करने से उत्तर

आप आगे से पूछते हैं:

वहाँ यदि सत्यापित करने के लिए एक रास्ता है इस: [[[contactDetailsDictionary objectForKey: @ "पेशेवर"] objectForKey: @ "CurrentJob"] objectForKey: @ "भूमिका"] मौजूद है? एक भी कुंजी नहीं, क्योंकि वास्तव में एक विशाल शब्दकोश है, इसलिए यह किसी अन्य श्रेणी में मौजूद हो सकता है। के रूप में के किसी भी भाग अगर

[[[contactDetailsDictionary objectForKey:@"professional"] 
           objectForKey:@"CurrentJob"] 
           objectForKey:@"Role"] != nil 

:

ऑब्जेक्टिव-सी में आप nil को एक संदेश भेज सकते हैं, यह कोई त्रुटि नहीं है और nil देता है, इतना आसान विधि का विस्तार ऊपर तुम सिर्फ लिखने कुंजी अनुक्रम एलएचएस मौजूद नहीं है रिटर्न nil

+1

जंजीर लुकअप के लिए, आप केवीसी का भी उपयोग कर सकते हैं: '[contactDetailsDictionary valueForKeyPath: @" professional.CurrentJob.Role "]'। –

+0

कोड की पहली पंक्ति में एक छोटा टाइपो है, विधि का नाम 'objectForKey' है, 'objectForkey' नहीं। – jamix

+0

@jamix - धन्यवाद, तय है। – CRD

6

NSDictionary सभी कुंजियों को NSArray के रूप में लौटाता है और फिर सरणी पर containsObject का उपयोग करें।

NSDictionary* dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"object", @"key"]; 
if ([[dictionary allKeys] containsObject:@"key"]) { 
    NSLog(@"'key' exists."); 
} 
+0

वहाँ सत्यापित करने के लिए एक रास्ता है कि अगर यह: [[[contactDetailsDictionary objectForKey: @ "पेशेवर"] objectForKey: @ "CurrentJob"] objectForKey: @ "भूमिका"] ] मौजूद है? एक भी कुंजी नहीं, क्योंकि वास्तव में एक विशाल शब्दकोश है, इसलिए यह किसी अन्य श्रेणी में मौजूद हो सकता है। –

+0

'NSDictionary' लौटने वाली विधि के लिए कॉल के साथ 'शब्दकोश' को बदलें। –

+0

यदि विधि एक ही चीज़ लौटाती है, तो ऐसा करने की क्या ज़रूरत है? शायद यह एक नोब सवाल है, लेकिन मैं फ्रंट एंड से आया था और उद्देश्य सी मुझे धीरे-धीरे मार रहा है: पी –

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