2012-03-30 11 views
40

मेरे पास एक एनएसएमयूटेबल डिक्शनरी है, और मैंने इसमें मूल्य जोड़े हैं (कई प्रमुख जोड़ी मान)। अब मुझे इस एनएसएमयूटेबल डिक्शनरी को NSUserDefaults ऑब्जेक्ट में सहेजने की आवश्यकता है।NSUserDefaults को NSDictionary सहेजना

1.) मेरा कोड निम्नानुसार है; मुझे यकीन नहीं है कि यह सही है, और मुझे यह भी पता होना चाहिए कि NSUSerDefault से NSMutableDictionary को कैसे पुनर्प्राप्त किया जाए?

2.) NSMutableDictionary को पुनर्प्राप्त करने के बाद मुझे इसे NSDictionary में सहेजने की आवश्यकता है। मैं ये कैसे कर सकता हूं?

NSMutableDictionary *dic = [[NSMutableDictionary alloc] init]; 

[dic addObject:@"sss" forKey:@"hi"]; 
[dic addObject:@"eee" forKey:@"hr"]; 

[NSUserDefaults standardDefaults] setObject:dic forKey:@"DicKey"]; 
[[NSUserDefaults standardDefaults] synchronize]; 
+5

आपको '[[NSUserDefaults मानक डिफ़ॉल्ट] सिंक्रनाइज़ करने के लिए भी कॉल करने की आवश्यकता है;' सहेजने के लिए। आप वास्तव में किसके साथ संघर्ष कर रहे हैं? आपने बताया है कि आप क्या करना चाहते हैं लेकिन जहां आपको समस्याएं नहीं हैं। जिस कोड को आपने ऊपर शामिल किया है (लापता '[') से अलग ठीक दिखता है। – Sam

+0

मुझे कुछ कुंजी-मूल्य जोड़े सहेजने और इसे किसी भिन्न दृश्य से एक्सेस करने की आवश्यकता है। इसलिए मैंने इसके लिए NSUserDefaults और NSDictionary का उपयोग करने का विचार किया। अंत में मुझे इन मानों के साथ एक टेबल पॉप्युलेट करना होगा। – shajem

+0

जब तक आप अधिक विस्तार नहीं जोड़ते, मुझे संदेह है कि आपको और अधिक जवाब मिलेंगे। आप चीजों को ठीक कर रहे हैं। जब आप '[[[NSUserDefaults मानक डिफॉल्ट] ऑब्जेक्ट को कॉल करते हैं तो आपको शब्दकोश नहीं मिल रहा है ForKey: @ "DicKey"] '? ध्यान दें कि यह 'NSDictionary *' प्रकार होगा और 'NSMutableDictionary *' नहीं होगा। यदि आप विचारों में डेटा में हेरफेर करना चाहते हैं, तो डेटा को उस डेटा मॉडल में संग्रहीत करने पर विचार करें जिसे आप दोनों दृश्यों में पारित करते हैं (या इस पर एक सिंगलटन एक्सेसर प्रदान करते हैं कि आप जेनेरिक/दृश्यमान डेटा को कैसे चाहते हैं)। – Sam

उत्तर

74

आपका कोड सही है, लेकिन एक बात आप को ध्यान में रखना है कि NSUserDefaults परिवर्तनशील और अपरिवर्तनीय वस्तुओं के बीच भेद नहीं करता है, इसलिए जब आप इसे वापस पाने के लिए यह अपरिवर्तनीय हो जाएगा:

NSDictionary *retrievedDictionary = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"DicKey"]; 

आप एक परिवर्तनशील शब्दकोश चाहते हैं, बस mutableCopy का उपयोग करें:

NSMutableDictionary *mutableRetrievedDictionary = [[[NSUserDefaults standardUserDefaults] objectForKey:@"DicKey"] mutableCopy]; 
+0

का उपयोग कर याद रखें कि, 'प्रतिलिपि' का उपयोग करके आप ऑब्जेक्ट को बनाए रखते हैं, इसलिए आप मालिक बन जाएंगे और आप इसे रिलीज़ करने के लिए जिम्मेदार होंगे। – Saphrosit

+22

मैन्युअल रूप से स्मृति का प्रबंधन करना, जैसा भी हो, है। – yuji

+2

मैं एआरसी का उपयोग कर रहा हूँ। और, मुझे NSUser डिफ़ॉल्ट पर NSMutableDictionary को सहेजने की आवश्यकता है, और NSUserDefaults से NSDictionary प्राप्त करें। तो मुझे लगता है कि मुझे आपके पहले दृष्टिकोण का उपयोग करना है? – shajem

5
NSMutableDictionary *profileDictionary = [[NSMutableDictionary alloc] init]; 
[profileDictionary setObject:txt_Username.text forKey:@"USERNAME_KEY"]; 
[profileDictionary setObject:txt_Password forKey:@"PASSWORD_KEY"]; 
[[NSUserDefaults standardUserDefaults] setObject:profileDictionary forKey:@"PROFILE_KEY"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

यह वही है जो आपने अपेक्षित था।