2011-11-18 16 views
33

सी # एप्लिकेशन में मैंने हमेशा app.config फ़ाइल का उपयोग किया ताकि मेरे एप्लिकेशन के लिए आवश्यक डेटा लोड करने के लिए कुछ डेटा बचाया जा सके (जैसे कनेक्शन स्ट्रिंग)।आईओएस एप्लीकेशन कॉन्फ़िगरेशन फ़ाइल

आईओएस एप्लिकेशन में इस तरह की जानकारी को सहेजने का सबसे अच्छा तरीका क्या है?

उत्तर

57

बारे में पता तो आप प्रॉपर्टी सूची फ़ाइल बना सकते हैं (जो XCode में के लिए एक टेम्पलेट है हो सकता है, कर रहे हैं बस फाइल करने के लिए -> नई फाइल और वहां चुनें), तो आपके पास "settings.plist", या ऐसा कुछ भी होगा। आप प्लस को एक कुंजी => वैल्यू कॉन्फ़िगरेशन फ़ाइल के रूप में सोच सकते हैं, इस अंतर के साथ कि आप सरणी पाठ के अलावा मूल्य के अलावा सरणी और शब्दकोश भी रख सकते हैं।

NSBundle उपयोग की तरह

NSString *path = [[NSBundle mainBundle] pathForResource:@"settings" ofType:@"plist"]; 
NSDictionary *settings = [[NSDictionary alloc] initWithContentsOfFile:path]; 

फिर आप एक नियमित शब्दकोश के रूप में अपनी चाबी का उपयोग कर सकते अपने अनुप्रयोग में फ़ाइल को लोड करने,। बस इसके बाद [रिलीज] मत भूलना;)।

+2

यदि fr33d0m नया है, तो वह शायद आईओएस 5 का उपयोग कर रहा है, जो कि एआरसी (स्वचालित संदर्भ गिनती) का उपयोग करने के लिए डिफ़ॉल्ट है, अगर ऐसा है, तो कुछ भी जारी न करें। –

+0

हां, मैं आईओएस 5 का उपयोग करूंगा। धन्यवाद। – Freedom

+0

हाँ, एआरसी, सर्जीओ के बारे में याद रखने के लिए धन्यवाद। –

2

आईओएस में प्रत्येक ऐप का अपना सैंडबॉक्स होता है जो केवल उस ऐप के लिए उपलब्ध होगा। तो यदि आप चाहते हैं कि उस फ़ाइल को केवल पढ़ने के लिए एप्लिकेशन बंडल में सहेज लें। अन्यथा एप्लिकेशन फ़ोल्डर में सहेजें।

आप सीधे एप्लिकेशन फ़ोल्डर तक नहीं पहुंच सकते हैं, इसलिए यदि आप अपनी फ़ाइल को उस फ़ोल्डर में सहेजना चाहते हैं तो आपको इसे प्रोग्रामेटिक रूप से करना होगा। - डेटा के छोटे टुकड़े के भंडारण के लिए

4

तुम सिर्फ विन्यास सामान की एक अपेक्षाकृत सरल सेट भंडारण कर रहे हैं, आप बस NSDictionary की क्रमबद्धता तरीकों का उपयोग कर सकते हैं (मैं कक्षा दस्तावेज़ में तरीकों निर्देशिका से जोड़ने के लिए कैसे पता नहीं है):

NSString *settingsPath = [@"~/pathtoconfig.plist" stringByExpandingTildeInPath]; 

NSMutableDictionary *settings = [NSMutableDictionary dictionary]; 
if([[NSFileManager defaultManager] fileExistsAtPath:settingsPath]){ 
    settings = [NSMutableDictionary dictionaryWithContentsOfFile:settingsPath]; 
} 

// writing settings 
[settings writeToFile:settingsPath atomically:YES]; 

के बाद से मैं नहीं जानता कि कैसे परिचित आप उद्देश्य-सी के साथ हैं, मैं यह भी ध्यान दूंगा:

  • आईओएस में, होम निर्देशिका application's sandboxed directory को संदर्भित करती है।
  • मैं संदर्भ गिनती पर थोड़ा सा पढ़ने की सलाह देता हूं। हालांकि उद्देश्य-सी, iOS5 के रूप में, अब automatically reference counts आप के लिए, वहाँ कुछ बढ़त मामलों के बारे में (Here's a SO question on ARC)
+1

आईओएस 5 स्वत: संदर्भ गिनती करता है, और डिफ़ॉल्ट रूप से एक्सकोड में सक्षम है। –

+0

सच है, मैं इसके बारे में भूल गया, हालांकि यह सही नहीं है। आईआईआरसी, आपको कोडिंग मानकों का पालन करना होगा जो कि अभी भी हैंडल चक्रीय निर्भरता है। – Jeff

10

कनेक्शन स्ट्रिंग जैसे डेटा के छोटे बिट्स के लिए, मैं NSUserDefaults का उपयोग करूंगा।

आप अपने कनेक्शन स्ट्रिंग को बचाने के लिए चाहते हैं, तो आप यह करते हैं चाहते हैं:

[[NSUserDefaults standardUserDefaults] setObject:myConnectionString 
              forKey:@"connectionString"]; 

आप इसे लोड करना चाहते हैं, आप ऐसा करते हैं चाहते हैं:

myConnectionString = [[NSUserDefaults standardUserDefaults] 
          stringForKey:@"connectionString"]; 
+4

NSUserDefaults के साथ, पहली बार जब मैं फ़ाइल में लिखता हूं तो मुझे एप्लिकेशन चलाने की आवश्यकता होती है। मेरा उद्देश्य एक फाइल है जहां मैं नियमित संपादक पर सामग्री को संपादित कर सकता हूं, बिना एप्लिकेशन को चलाने के (शायद मैं ऐसा इसलिए करना चाहता हूं क्योंकि मुझे विंडोज़ पर app.config पर उपयोग किया जाता है)। फिर भी धन्यवाद... – Freedom

2

आईओएस आवेदन विन्यास फ़ाइल स्विफ्टआईओएस 8 के साथ।3:

let path: String = NSBundle.mainBundle().pathForResource("Info", ofType: "plist")! 
    let nsDictionaryInfoPlist: NSDictionary = NSDictionary(contentsOfFile: path)! 

    // Usage example: Google Maps iOS SDK/API Configuration. 
    GMSServices.provideAPIKey(nsDictionaryInfoPlist.objectForKey("GoogleMapsiOSAPIKey") as! String) 
0

मुझे पता है मैं पार्टी के लिए देर हो रही है, लेकिन इस ढेर अतिप्रवाह मैं स्वीकार किए जाते हैं जवाब में निराश था पाने के बाद, तो मैं created a pod इसे हल करने के लिए! यह @ राफेलस्टिल के answer के विचार पर आधारित है, लेकिन इसमें एक सरल इंटरफ़ेस है, लोड किए गए कॉन्फ़िगरेशन डेटा को कैश करता है, और यह अपने स्वयं के डिफ़ॉल्ट प्रदान करने वाले फोड का समर्थन करता है जिसे मुख्य ऐप द्वारा ओवरराइड किया जा सकता है। मुझे उम्मीद है कि यह किसी की मदद करेगा।

0

के लिए स्विफ्ट 3 Xcode 8

अपडेट किया गया "Sample.plist" नाम अपनी परियोजना के लिए एक नया संपत्ति सूची में जोड़ें। फिर निम्नलिखित उदाहरण देखें।

let path: String = Bundle.main.path(forResource: "Sample", ofType: "plist")! 
    let sampleConf: NSDictionary = NSDictionary(contentsOfFile: path)! 
    print(sampleConf.object(forKey: "test") as! String) 
संबंधित मुद्दे