2011-12-12 263 views
40

我想爲我的NSUserDefault鍵設置一些初始值,以便應用程序的第一次運行有一些合理的初始設置。我想我在應用程序包.plist中運行一個簡單的方法來完成此操作,但現在我無法找到它。有任何想法嗎?如何設置NSUserDefault鍵的初始值?

+0

檢查:http://jayprakashdubey.blogspot.in/2014/07/nsuserdefault -usage.html –

回答

68

你應該使用NSUserDefaultsregisterDefaults方法來完成。準備一個包含默認首選項的包中的plist文件,然後使用該plist來註冊默認值。

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

您必須在每次啓動應用程序時執行此代碼。它會將這些值添加到用戶默認層次結構中的單獨域中。只要您的應用的用戶默認不提供某個鍵的值,NSUserDefaults就會回退到該域並從中檢索該值。

+0

看起來像這樣將默認值註冊到易失性存儲位置。我不希望它經常回到默認值。這主要是第一次發射。用戶設置的值是保留的,還是偶爾會被這個覆蓋? – Suz

+4

「易失性內存位置」是什麼意思?您必須在每次啓動應用程序時執行此代碼。它會將這些值添加到用戶默認層次結構中的單獨域中。只要你的應用程序的用戶默認不提供某個鍵的值,'NSUserDefaults'就會回退到這個域並從那裏檢索值。 –

+0

用戶默認編程指南列出了NSRegistrationDomain具有'volatile'狀態,而不是'persistent'。因此,用戶默認設置本身是永久性的,默認設置是不穩定的,並且必須在每次應用啓動時重新加載。對我來說,「回退」值不如用戶設置更持久,這似乎很奇怪。 – 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

我同意。當我寫這個答案時,我不知道registerDefaults,但現在使用它。 –

5

如果你有很多默認值,讓使用ola's answer,否則這是好幾個PARAMS

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; 
}