2011-12-12 18 views
40

मैं अपने NSUserDefault कुंजी के लिए कुछ प्रारंभिक मान सेट करना चाहता हूं ताकि ऐप के पहले भाग में कुछ उचित आरंभिक सेटिंग्स हों। मैंने सोचा कि मैं ऐप बंडल में ऐसा करने के लिए एक सरल तरीके से भाग गया .plist, लेकिन अब मुझे यह नहीं मिल रहा है। कोई विचार?NSUserDefault कुंजी के लिए प्रारंभिक मान कैसे सेट करें?

+0

चेक यह अच्छा है: http://jayprakashdubey.blogspot.in/2014/07/nsuserdefault -usage.html –

उत्तर

68

आप NSUserDefaults की registerDefaults विधि का उपयोग करना चाहिए से किया। अपनी बंडल में एक प्लेलिस्ट फ़ाइल तैयार करें जिसमें डिफ़ॉल्ट वरीयताएं हों और फिर डिफ़ॉल्ट को पंजीकृत करने के लिए उस प्लिस्ट का उपयोग करें।

NSString *defaultPrefsFile = [[NSBundle mainBundle] pathForResource:@"defaultPrefs" ofType:@"plist"]; 
NSDictionary *defaultPreferences = [NSDictionary dictionaryWithContentsOfFile:defaultPrefsFile]; 
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultPreferences]; 

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

+0

ऐसा लगता है कि यह एक अस्थिर स्मृति स्थान पर डिफ़ॉल्ट को पंजीकृत करता है। मैं नहीं चाहता कि यह अक्सर डिफ़ॉल्ट रूप से चूक जाए। यह ज्यादातर 1 लॉन्च के लिए है। क्या उपयोगकर्ता-सेट मान संरक्षित किए जाएंगे, या क्या वे कभी-कभी इस पर अधिक लिखे जाएंगे? – Suz

+4

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

+0

उपयोगकर्ता डिफ़ॉल्ट प्रोग्रामिंग गाइड NSRegistrationDomain को 'अस्थिर' स्थिति के रूप में 'अस्थिर' स्थिति के रूप में सूचीबद्ध करता है। इसलिए, उपयोगकर्ता डिफ़ॉल्ट सेटिंग्स स्वयं लगातार हैं और डिफ़ॉल्ट अस्थिर हैं, और प्रत्येक ऐप लॉन्च पर पुनः लोड किया जाना है। यह मेरे लिए अजीब लगता है कि 'पतन बैक' मान उपयोगकर्ता सेटिंग से कम लगातार है। – Suz

0
if ([[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:@"initialValuesHaveBeenWritten"]) 
{ 
    [[NSUserDefaults standardUserDefaults] setValue:obj1 forKey:key1]; 
    [[NSUserDefaults standardUserDefaults] setValue:obj2 forKey:key2]; 


    [[NSUserDefaults standardUserDefaults] setValue:obj1 forKey:@"initialValuesHaveBeenWritten"]; 

    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 

एनबी: जांची नहीं, स्मृति

+1

यह वास्तव में इसका सही तरीका नहीं है। काम करता है, लेकिन यह ऐप्पल का सुझाव नहीं है। @ole द्वारा उत्तर में वर्णित अनुसार -registerDefaults का उपयोग करें, या उन्हें सीधे NSRegistrationDomain डोमेन में जोड़ें। –

+0

मैं सहमत हूं। जब मैंने यह उत्तर लिखा था तो मुझे रजिस्टर डिफ़ॉल्ट के बारे में पता नहीं था, लेकिन अब मैं इसका उपयोग करता हूं। –

5

आप कई मूलभूत मूल्यों है, तो ola's answer का उपयोग करते हैं, अन्यथा इस में कुछ पैरामीटर के लिए

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

if (![defaults boolForKey:USERDEFAULT_IS_INITIALIZED]) { 
    [defaults setBool:YES forKey:USERDEFAULT_IS_INITIALIZED]; 

    // Set initial values 
    ... 

    [defaults synchronize]; 
} 
-1
-(void) loadDef 
{ 
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 

    _removeAd=[userDefaults boolForKey:SAVE_AD_STATUS]; 

    NSString* strDefSetting=[userDefaults stringForKey:SAVE_STATUS_ADSETTING]; 
    if(strDefSetting==nil 
     ||[strDefSetting isEqualToString:@""] 
     ) 
    { 
     [email protected]"0.5"; 
    } 

    _floatAdmob=strDefSetting.floatValue;//0.5; 
} 
संबंधित मुद्दे

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