2010-03-23 10 views
9

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

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

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

NSString *path = [[NSBundle mainBundle] pathForResource:@"FormData" ofType:@"plist"]; 
NSLog(@"path:%@", path); 

[dictionary writeToFile:path atomically:YES]; 

उत्तर

24

जोहान सही है - आपको अपने ऐप के बंडल को संशोधित करने की अनुमति नहीं है। आपके शब्दकोश को सहेजने के लिए आपके पास दो अच्छे विकल्प हैं: दस्तावेज़ निर्देशिका, जिसका उपयोग आईट्यून्स द्वारा किया जाता है जब कोई उपयोगकर्ता अपने डिवाइस को सिंक करता है; या कैश निर्देशिका, जिसका बैक अप नहीं लिया गया है। यदि आपको डेटा का बैक अप लेने की आवश्यकता नहीं है, तो इसे कैश में रखें ताकि आप समन्वयन को धीमा न करें। आप निर्देशिका पथ जैसे प्राप्त कर सकते हैं:

NSString *documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 

NSString *cachesDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
+3

+1 विवरण सहित। – alesplin

+1

मुझे लगता है कि इसे शायद एक अतिरिक्त जानकारी की आवश्यकता है कि दस्तावेज़ साझाकरण मौजूद है। ऐप्पल से: "यदि आप उपयोगकर्ता के साथ फ़ाइलों को साझा नहीं करना चाहते हैं, तो उन्हें अपने एप्लिकेशन की लाइब्रेरी निर्देशिका में रखें। यदि कोई भी मानक लाइब्रेरी उपनिर्देशिका उचित नहीं है, तो लाइब्रेरी निर्देशिका के अंदर एक निजी निर्देशिका बनाएं और इसे अपना नाम दें एप्लिकेशन की बंडल आईडी। फिर आप उस निर्देशिका का उपयोग अपने आवेदन के लिए निजी फाइलों को स्टोर करने के लिए कर सकते हैं। " –

5

यह सहेजा नहीं जाता है क्योंकि आप अपने ऐप के बंडल में नहीं लिख सकते हैं। उदाहरण के लिए दस्तावेज़ फ़ोल्डर में, कहीं और अपनी फ़ाइल सहेजें।

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