2011-01-08 19 views
69

में मौजूद रहने पर यह मौजूद है ?:चेक कुंजी NSDictionary

[[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"] 

मुझे पता है कि इस कुंजी मौजूद है या नहीं चाहते हैं मैं कैसे जांच कर सकते हैं। मैं उसे कैसे कर सकता हूँ?

आपको बहुत बहुत धन्यवाद :)

संपादित करें: dataArray उस में वस्तुओं है। और ये वस्तुएं एनएसडीजीई हैं।

+0

किसी भी कारण से आप '-objectForKey:' के बजाय '-valueForKey:' का उपयोग कर रहे हैं? पूर्व का उपयोग कुंजी-मूल्य कोडिंग में किया जाता है और बाद वाले की तुलना में थोड़ा धीमा होता है। –

उत्तर

149

मुझे लगता है कि [dataArray objectAtIndex:indexPathSet.row] एक NSDictionary, जिस स्थिति में आप बस नहीं के बराबर के खिलाफ valueForKey का परिणाम की जांच कर सकते लौटा रहा है।

उदाहरण के लिए:

if([[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"] != nil) { 
    // The key existed... 

} 
else { 
    // No joy... 

} 
34

चेक अगर यह नहीं के बराबर है:

if ([[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"] != nil) { 
    // SetEntries exists in this dict 
} else { 
    // No SetEntries in this dict 
} 
46

तो मैं जानता हूँ कि आप पहले से ही एक जवाब का चयन किया है, लेकिन मैं इस NSDictionary पर एक वर्ग के रूप में नहीं बल्कि उपयोगी पाया। आप इन सभी अलग-अलग उत्तरों के साथ इस बिंदु पर दक्षता प्राप्त करना शुरू कर देते हैं। मेह ... 1 की 6 ...

- (BOOL)containsKey: (NSString *)key { 
    BOOL retVal = 0; 
    NSArray *allKeys = [self allKeys]; 
    retVal = [allKeys containsObject:key]; 
    return retVal; 
} 
+0

मैंने अपनी श्रेणी में एक ही विधि भी लिखी, लेकिन जब मैं UIImageWriteToSavedPhotosAlbum() का उपयोग करता हूं तो मेरे पास एक अजीब दुर्घटना होती है। संकीर्ण होने के बाद, मैं विधि से बदलता हूं नाम => हैकी और दुर्घटना गायब हो गई – kaala

+0

यह स्वीकृत उत्तर से काफी बेहतर है। मैं एक कुंजी से खोजना चाहता हूं और नहीं कि कुंजी का मूल्य शून्य है या नहीं। आपके पास एक शब्दकोश में एक कुंजी हो सकती है जो शून्य मान को इंगित करती है। फिर भी कुंजी मौजूद है। स्वीकृत उत्तर इस परिदृश्य को शामिल नहीं करता है। लेकिन यह समाधान यहाँ करता है। – Houman

+3

@ हूमन: शून्य के मूल्य वाले कुंजी के बारे में सच नहीं: NSDictionary प्रलेखन का दूसरा अनुच्छेद (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/Reference /Reference.html) कहता है कि "न तो एक कुंजी और न ही मूल्य शून्य हो सकता है; यदि आपको किसी शब्दकोश में शून्य मान का प्रतिनिधित्व करने की आवश्यकता है, तो आपको NSNull का उपयोग करना चाहिए।" यह दोनों और स्वीकृत उत्तर आपके परिदृश्य के लिए काम करते हैं, यानी एक शब्दकोश के साथ जहां कुछ कुंजी के लिए मान शून्य है (प्रकार NSNull)। –

0
if ((NSNull *)[[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"] != nil) { 
    // SetEntries exists in this dict 
} else { 
    // No SetEntries in this dict 
} 

सही जवाब है कि।

+0

BOOL से NSNull * के लिए कलाकार क्या है? –

0

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

if ([dict objectForKey:@"bla"]) { 
    // use obj 
} else { 
    // Do something else like create the object 
} 
+1

यह तकनीकी रूप से सही स्पष्टीकरण हो सकता है, लेकिन यदि आप अपने उत्तर के शरीर में अपने तर्क के बारे में अधिक विस्तृत चर्चा प्रदान करते हैं तो आप समुदाय को बेहतर सेवा दे रहे हैं (और अधिक संभावनाएं प्राप्त कर सकते हैं)। किसी अन्य विधि के बजाय 'objectForKey: 'का उपयोग करना उचित क्यों है? आपको स्पष्ट रूप से मूल्य की जांच क्यों नहीं करनी है? कम से कम, प्रश्न में दिए गए कोड उदाहरण का उपयोग करके आपके उदाहरण को मूल प्रश्न से जोड़ना आसान हो जाएगा। – Palpatim

0

यह एक ही करता है लेकिन कम कोड के साथ:

if (dataArray[indexPathSet.row][@"SetEntries"] != nil) { /* the key exists */  } 
else             { /* the key doesn't exist */ } 
6

यह भी निम्न सिंटैक्स का उपयोग कर ऑब्जेक्टिव-सी शाब्दिक का उपयोग कर काम करता है:

NSDictionary *dict = @{ @"key1" : @"value1", @"key2" : @"value2" }; 
if (dict[@"key2"]) 
NSLog(@"Exists"); 
else 
NSLog(@"Does not exist"); 
+0

कोड के नीचे त्वरित संस्करण के लिए काम करता है। हेडर करते हैं: शब्दकोश = HttpResponse .allHeaderFields अगर (हेडर [ "ERRORCODE"] = शून्य!) { प्रिंट ("त्रुटि कुंजी मौजूद है") } –

0

चेक शब्दकोश में कोई मूल्य है। मैं [dic allKeys] पसंद करता हूं। चेक> 0 चेक करने के लिए।

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