2009-11-19 9 views
66

मैं एक ऐसा एप्लीकेशन विकसित कर रहा हूं जिसमें मैं NSDictionary का उपयोग करना चाहता हूं। क्या कोई मुझे सही उदाहरण के साथ डेटा स्टोर करने के लिए NSDictionary का उपयोग करने की प्रक्रिया को समझाते हुए नमूना कोड भेज सकता है?हम एनएस डिक्शनरी में कैसे स्टोर कर सकते हैं? NSDictionary और NSMutableDictionary के बीच क्या अंतर है?

+52

आप NSDictionary प्रलेखन पर एक नज़र होने से शुरू कर सकता है ... – stefanB

+7

विनम्र RTFMs किसी भी तरह स्पष्ट की तुलना में अधिक कास्टिक लगते हैं। –

+1

@stefanB कई नए प्रोग्रामर आधिकारिक दस्तावेज अक्सर बहुत जटिल और भ्रमित होते हैं इसलिए SO पर _x_ का मूल दृश्य मदद करता है। –

उत्तर

189

NSDictionary और NSMutableDictionary डॉक्स शायद आपका सर्वश्रेष्ठ दांव हैं। वे भी कैसे की तरह विभिन्न काम करने के लिए, पर कुछ महान उदाहरण ...

है ... एक NSDictionary

NSArray *keys = [NSArray arrayWithObjects:@"key1", @"key2", nil]; 
NSArray *objects = [NSArray arrayWithObjects:@"value1", @"value2", nil]; 
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects 
                 forKeys:keys];

बनाने ... पुनरावृति पर

for (id key in dictionary) { 
    NSLog(@"key: %@, value: %@", key, [dictionary objectForKey:key]); 
}

... इसे परिवर्तनीय बनाएं

NSMutableDictionary *mutableDict = [dictionary mutableCopy];

नोट: ऐतिहासिक संस्करण से पहले 2010: [[शब्दकोश mutableCopy] autorelease]

... और बदल यह

[mutableDict setObject:@"value3" forKey:@"key3"];

... तो यह एक फ़ाइल करने की दुकान

[mutableDict writeToFile:@"path/to/file" atomically:YES];

... और इसे वापस पढ़ें एगा

NSMutableDictionary *anotherDict = [NSMutableDictionary dictionaryWithContentsOfFile:@"path/to/file"];

में ... एक मूल्य

NSString *x = [anotherDict objectForKey:@"key1"]; 

पढ़ें ... जाँच लें कि एक चाबी मौजूद है

if ([anotherDict objectForKey:@"key999"] == nil) NSLog(@"that key is not there"); 

... डरावना भविष्य वाक्य रचना का उपयोग

2014 से आप वास्तव में सिर्फ टाइप कर सकते हैं dict [@ "कुंजी"] के बजाय [dict objectForKey: @ "कुंजी"]

+0

क्षमा करें, आखिरी टिप्पणी थोड़ा सा साँस था। इस पर ध्यान दिलाने के लिए धन्यवाद। – Tim

+0

मैंने इसे नहीं देखा, तो आप अच्छे हैं! :) – jtbandes

+0

सही ... एक रिसाव –

32
NSDictionary *dict = [NSDictionary dictionaryWithObject: @"String" forKey: @"Test"]; 
NSMutableDictionary *anotherDict = [NSMutableDictionary dictionary]; 

[anotherDict setObject: dict forKey: "sub-dictionary-key"]; 
[anotherDict setObject: @"Another String" forKey: @"another test"]; 

NSLog(@"Dictionary: %@, Mutable Dictionary: %@", dict, anotherDict); 

// now we can save these to a file 
NSString *savePath = [@"~/Documents/Saved.data" stringByExpandingTildeInPath]; 
[anotherDict writeToFile: savePath atomically: YES]; 

//and restore them 
NSMutableDictionary *restored = [NSDictionary dictionaryWithContentsOfFile: savePath]; 
+0

अच्छी व्याख्या। यह सहायक था .. –

+0

@ बेन गॉटलिब भाग एक: अच्छी व्याख्याओं के लिए धन्यवाद। वास्तव में मैं MutableDictionary से एक फ़ाइल में अपने दो UItextField डेटा को सहेजना चाहता हूं। यहां आपने 'NSString * savePath = [@" ~/दस्तावेज़/saved.data "stringByExpandingTildeInPath] लिखा है; ', अब मेरा प्रश्न है,' saved.data' फ़ाइल यहां क्या है? मैं इसे कैसे बना सकता हूं? – Tulon

+0

@ बेन गॉटलिब भाग दो: और मेरे मामले में मैंने निम्नलिखित निर्देशिका में एक पाठ फ़ाइल (.rtf) डाली है 'सहायक फाइलें> मीडियाफाइल> दस्तावेज़> userData.rtf'.अब मैं इस प्रकार के Mutabledictionary डेटा को टेक्स्ट फ़ाइल में सहेज सकता हूं ? और इस मामले में सही निर्देशिका क्या होगी? मैं इस '[userData लिखने के लिए फ़ाइल: @ "मीडियाफाइल/दस्तावेज़/userData.rtf" परमाणु रूप से: हाँ];' और इसके साथ [उपयोगकर्ता डेटा लिखने के लिए फ़ाइल: @ "दस्तावेज़/उपयोगकर्ता डेटा.एआरटीएफ" परमाणु रूप से: हाँ, लेकिन, काम नहीं किया एक अच्छा दिन है। – Tulon

18

मुख्य अंतर: NSMutableDictionary जगह में संशोधित किया जा सकता, NSDictionary नहीं कर सकता। कोको में अन्य सभी एनएसएमयूटेबल * कक्षाओं के लिए यह सच है। एनएसएमयूटेबल डिक्शनरी एनएस डिक्शनरी के है, इसलिए एनएस डिक्शनरी के साथ आप जो भी कर सकते हैं, आप दोनों के साथ कर सकते हैं। हालांकि, एनएसएमयूटेबल डिक्शनरी चीजों को संशोधित करने के लिए पूरक तरीकों को भी जोड़ती है, जैसे विधि setObject:forKey:

आप इस तरह दोनों के बीच में बदल सकते हैं:

NSMutableDictionary *mutable = [[dict mutableCopy] autorelease]; 
NSDictionary *dict = [[mutable copy] autorelease]; 

मुमकिन है आप एक फ़ाइल में लिख कर डाटा स्टोर करना चाहते हैं।NSDictionary यह करने के लिए एक विधि (जो भी NSMutableDictionary के साथ काम करता है):

BOOL success = [dict writeToFile:@"/file/path" atomically:YES]; 

किसी फ़ाइल से कोई शब्दकोश पढ़ने के लिए, वहाँ एक इसी विधि:

NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:@"/file/path"]; 

आप के रूप में फ़ाइल में पढ़ना चाहते हैं एक NSMutableDictionary, बस का उपयोग करें:

NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithContentsOfFile:@"/file/path"]; 
+0

उत्तर के लिए धन्यवाद ... –

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