2011-01-24 8 views
7

मुझे ऐप लॉन्च करते समय सेटिंग्स बंडल से डिफ़ॉल्ट मान पुनर्प्राप्त करने में समस्या है। सभी गैर-बहुविकल्पीय फ़ील्ड डिफ़ॉल्ट रूप से डिफ़ॉल्ट रूप से लौटते हैं। सभी बहुविकल्पीय क्षेत्र वापस लौटते हैं।मल्टीवाइवल प्रकार सेटिंग्स बंडल फ़ील्ड हमेशा वापस शून्य

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *upt=[defaults objectForKey:@"upthreshold"]; 

Root.plist से प्रासंगिक अनुभाग है: कोड मैं वर्तमान मूल्य को पुनः प्राप्त करने का उपयोग कर रहा

   <dict> 
        <key>Title</key> 
        <string>Update Threshold</string> 
        <key>Type</key> 
        <string>PSMultiValueSpecifier</string> 
        <key>Key</key> 
        <string>upthreshold</string> 
        <key>DefaultValue</key> 
        <string>15</string> 
        <key>Titles</key> 
        <array> 
          <string>2 km</string> 
          <string>5 km</string> 
          <string>10 km</string> 
          <string>15 km</string> 
          <string>25 km</string> 
          <string>50 km</string> 
          <string>75 km</string> 
          <string>100 km</string> 
          <string>150 km</string> 
          <string>250 km</string> 
          <string>500 km</string> 
          <string>1000 km</string> 
        </array> 
        <key>Values</key> 
        <array> 
          <string>2</string> 
          <string>5</string> 
          <string>10</string> 
          <string>15</string> 
          <string>25</string> 
          <string>50</string> 
          <string>75</string> 
          <string>100</string> 
          <string>150</string> 
          <string>250</string> 
          <string>500</string> 
          <string>1000</string> 
        </array> 
      </dict> 

मैं उम्मीद होती है कि "15" यह के रूप में वर्तमान मूल्य के रूप में वापस आना चाहते हैं डिफ़ॉल्ट मान पर सेट है। क्या मल्टीवल्यू फ़ील्ड के लिए कुछ अलग प्रोसेसिंग आवश्यक है? जैसा कि मैंने पहले कहा था, इससे पहले 6 फ़ील्ड हैं जो उनके मूल्यों को सही तरीके से वापस कर देते हैं। यह क्षेत्र और निम्नलिखित 2 बहुविकल्पीय फ़ील्ड नहीं हैं। बहुस्तरीय फ़ील्ड सभी को परिभाषित किया गया है।

+0

मैं इसे गलत समझ सकता हूं, लेकिन ऐसा लगता है कि "अपथ्रॉल्ड" कुंजी "कुंजी" के लिए एक मान है, न कि कुंजी। –

+0

मेरे पास सभी फ़ील्ड इस तरह से सेटअप हैं और मैंने जो भी उदाहरण देखा है, वह इस तरह से "कुंजी" सेट करता है और जब आप ऑब्जेक्ट करते हैं तो फ़ील्ड को संदर्भित करते हैं। मुझे लगता है कि यह सही है। यदि नहीं, तो आप इसे कैसे परिभाषित करेंगे? – mlewis54

+0

यदि सेटिंग्स पृष्ठ अभी तक नहीं देखा गया है तो मुझे हमेशा डिफ़ॉल्ट मानों में परेशानी होती है। मैं ऐप में डिफ़ॉल्ट और हार्डकोड को डिफ़ॉल्ट रूप से पहचानता हूं। यह सुंदर नहीं है लेकिन यह काम करता है :( – deanWombourne

उत्तर

21

यदि सेटिंग ऐप में उपयोगकर्ता द्वारा मूल्य नहीं बदला गया था तो कोई सेटिंग नहीं है। सेटिंग बंडल में निर्दिष्ट डिफ़ॉल्ट मान केवल सेटिंग ऐप

में डिस्प्ले के लिए डिफ़ॉल्ट है, आपको अपने डिफ़ॉल्ट मान मैन्युअल रूप से पंजीकृत करना होगा। NSUserdefaults सेटिंग्स बंडल से डिफ़ॉल्ट का उपयोग नहीं करता है।
इस तरह कुछ उपयोग करें, इसे अपने ऐप की शुरुआत में जोड़ें (उपयोगकर्ताdefaults तक पहुंचने से पहले)।
पंजीकृत उपयोगकर्ताdefaults डिस्क या कुछ भी सहेजे नहीं गए हैं। जब भी आप ऐप शुरू करेंगे तो आपको उन्हें पंजीकरण करना होगा।

NSDictionary *userDefaultsDefaults = [NSDictionary dictionaryWithObjectsAndKeys: 
             @"15", @"upthreshold", 
             nil]; 
[[NSUserDefaults standardUserDefaults] registerDefaults:userDefaultsDefaults]; 
+0

धन्यवाद। यह चाल है। ऐसा लगता है कि बदलाव से पहले एकल मूल्य फ़ील्ड के लिए डिफ़ॉल्ट काम करता था (मैंने सेटिंग्स एप का उपयोग करके उन्हें कभी सेट नहीं किया)। ऐसा लगता है कि काउंटर-इंट्यूविटिव है डिफ़ॉल्ट मान जो वास्तव में ऐप में इसे सेट किए बिना वास्तव में नहीं है। किसी सुविधा से दूर ले जाता है जो प्रोग्रामिंग समय को कम करता है। भले ही, मदद के लिए धन्यवाद। – mlewis54

+0

यह गलतफहमी मूल्य प्रकार से संबंधित नहीं है - मैं हूं Booleans के साथ एक ही समस्या है (निर्दिष्ट डिफ़ॉल्ट हाँ है, लेकिन [डिफ़ॉल्ट boolForKey: ...] देता है NO) – 18446744073709551615

+0

मैं बस इस समस्या में भागता हूं। यदि आप केवल एक कुंजी के लिए 'रजिस्टर डिफॉल्ट' करते हैं, तो यह अलग कैसे है बस दिए गए कुंजी के लिए ऑब्जेक्ट सेट करें? – Besi

1

मैं सिर्फ इस समस्या का सामना किया और मैं अपने आप को पूछना क्यों सेटिंग्स बंडल, एक डिफ़ॉल्ट मान प्रदान करता है, तो यह मान NSUserDefaults से कभी नहीं पढ़ा जा सकता है।

  • किसी कुंजी के
  • के लिए मूल्य पढ़ें कुंजी एक डिफ़ॉल्ट सेट नहीं मौजूद है, तो और वापसी इस डिफ़ॉल्ट

तो:

मैं एक तेज विस्तार है जो निम्न करता बनाया मैं यह कर सकता हूं:

NSUserDefaults.standardUserDefaults().settignsStringValue("MYPREFS_DOMAIN", defaultValue: "domain.com") 

यह एक्सटेंशन है:

extension NSUserDefaults{ 

    func settingsBoolValue(key: String, defaultValue: Bool) -> Bool{ 
     // The case for Bool is different as it would return `false` when the key is not set. 
     if let v: AnyObject = self.objectForKey(key){ 
      // The boolean value exists 
     } else { 
      self.setObject(defaultValue, forKey: key) 
     } 

     return self.boolForKey(key) 
    } 

    func settingsStringValue(key: String, defaultValue: String) -> String{ 
     if let v = self.stringForKey(key){ 
      return v 
     } else { 
      self.setObject(defaultValue, forKey: key) 
      return defaultValue 
     } 
    } 
} 
संबंधित मुद्दे