2011-12-12 243 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; 
}