2011-06-10 17 views
13

पर सहेजें, मैं इस पोस्ट में पाए गए कोड का उपयोग कर रहा हूं: Mulitple Arrays From Plist, उसी प्लिस्ट स्वरूपण के साथ।एनएस डिक्शनरी को

यह सफलतापूर्वक काम करता है, हालांकि मुझे नहीं पता कि बनाए गए सरणी को एक ही प्रारूप में, एक प्लेस्ट में वापस कैसे सहेजना है।

मैं इसे कैसे प्राप्त करूं?

संपादित करें: मुझे इतना बचत नहीं है कि मुझे चाहिए, लेकिन डेटा को सहेजने के लिए।
प्लिस्ट तारों और उनकी संबंधित कुंजी वाले शब्दकोशों की एक सरणी है। किसी निश्चित कुंजी के साथ सभी तारों को स्वयं की एक सरणी में रखा जाता है।

मैं उस सरणी को वापस सहेजने के लिए तैयार शब्दकोशों की सरणी में सही स्थिति में कैसे रखूंगा?

NSDictionary* dict = ...; 
[dict writeToFile:@"..." atomically:YES]; 

-writeToFile:atomically: के लिए दस्तावेज़ देखें:

उत्तर

14

myPlistFile.plist बनाने और इसे अपने एप्लिकेशन संसाधन फ़ोल्डर में जोड़ने के लिए मत भूलना।

NSError *error; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

आप यहां पथ स्कैन कर सकते हैं और लूप के लिए myPlistFile.plist खोज सकते हैं।

NSString *plistPath = [documentsDirectory stringByAppendingPathComponent:@"myPlistFile.plist"]; 
if (![[NSFileManager defaultManager] fileExistsAtPath: plistPath]) 
{ 
      NSString *bundle = [[NSBundle mainBundle] pathForResource:@"myPlistFile" ofType:@"plist"]; 
      [[NSFileManager defaultManager] copyItemAtPath:bundle toPath:plistPath error:&error]; 
} 
[myDict writeToFile:plistPath atomically: YES]; 
+1

यह काम नहीं करेगा क्योंकि मुख्य बंडल केवल पढ़ने के लिए –

+0

@ एशले स्टैग्स: अद्यतन उत्तर की जांच करें। – Jhaliya

+0

मुझे पता है कि मैं इसे कहां से सहेजने जा रहा हूं, लेकिन यह यह है कि मुझे सही –

22

यहाँ सबसे आसान तरीका है।

+0

मुझे पता है कि इस फ़ाइल को सहेजना होगा, लेकिन मुझे नहीं लगता इस सरणियों Plist से बनते में वापस हो जाएगा करते हैं सरणी का एक ही तरीका-> शब्दकोश-> स्ट्रिंग –

+6

क्या आपने इसे आजमाया है? यह एक प्लिस्ट को कुछ भी लिख सकता है जिसे एक प्लेस्ट से पढ़ा जा सकता है। जब तक आप शब्दकोश में डेटा को ऑर्डर करने के तरीके को बदल नहीं देते हैं, तो इसे बिल्कुल उसी तरह लिखना चाहिए। –

+1

** सबसे महत्वपूर्ण ** - यह विधि पुनरावर्ती रूप से मान्य करती है कि सभी निहित वस्तुएं संपत्ति सूची वस्तुएं ('एनएसडीएटीए, 'एनएसडीएटी',' एनएसएनंबर',' एनएसएसटींग', 'एनएसएआरआरई', या 'एनएस डिक्शनरी' के उदाहरण हैं) फ़ाइल लिखने से पहले, और 'NO' लौटाता है यदि सभी ऑब्जेक्ट्स संपत्ति सूची ऑब्जेक्ट्स नहीं हैं, क्योंकि परिणामी फ़ाइल मान्य संपत्ति सूची नहीं होगी। – enadun

0

और इसके विपरीत, किसी फ़ाइल से कोई NSDictionary लोड करने के लिए:

+ (id)dictionaryWithContentsOfFile:(NSString *)path; 
संबंधित मुद्दे