如何为 NSUserDefault Keys 设置初始值?

Posted

技术标签:

【中文标题】如何为 NSUserDefault Keys 设置初始值?【英文标题】:How to set initial values for NSUserDefault Keys? 【发布时间】:2011-12-12 12:01:15 【问题描述】:

我想为我的 NSUserDefault 键设置一些初始值,以便应用程序的第一次运行具有一些合理的初始设置。我以为我在 app bundle .plist 中遇到了一种简单的方法来执行此操作,但现在我找不到它。有什么想法吗?

【问题讨论】:

检查这个:jayprakashdubey.blogspot.in/2014/07/nsuserdefault-usage.html 【参考方案1】:

您应该使用NSUserDefaultsregisterDefaults 方法。在您的包中准备一个包含默认首选项的 plist 文件,然后使用该 plist 注册默认值。

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

您必须在每次启动应用时执行此代码。它将这些值添加到用户默认层次结构中的单独域中。每当您的应用的用户默认值不为某个键提供值时,NSUserDefaults 将回退到该域并从那里检索值。

【讨论】:

看起来这会将默认值注册到易失性内存位置。我根本不希望它经常回到默认值。这主要用于第一次发布。用户设置的值会被保留,还是偶尔会被它覆盖? “易失性内存位置”是什么意思?您必须在每次启动应用程序时执行此代码。它将这些值添加到用户默认层次结构中的单独域中。每当您的应用的用户默认值不为某个键提供值时,NSUserDefaults 将回退到该域并从那里检索值。 用户默认编程指南将 NSRegistrationDomain 列为“易失”状态,而不是“持久”状态。因此,用户默认设置本身是持久的,并且默认设置是不稳定的,并且必须在每次应用启动时重新加载。对我来说,“回退”值不如用户设置持久性对我来说似乎很奇怪。 我同意这看起来有点奇怪,但它工作得很好,并且当你考虑它时确实有意义。 @OleBegemann 您应该将您的第一条评论或其中的一部分移到您的答案中。那是我第一次明白 registerDefaults 究竟做了什么!【参考方案2】:

如果你有很多默认值,就用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];

【讨论】:

【参考方案3】:
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];

注意:未经测试,凭记忆完成

【讨论】:

这确实不是正确的方法。有效,但这不是Apple建议的。使用@ole 的答案中描述的 -registerDefaults,或者直接将它们添加到 NSRegistrationDomain 域。 我同意。我写这个答案时不知道 registerDefaults 但我现在使用它。【参考方案4】:
-(void) loadDef

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

    _removeAd=[userDefaults boolForKey:SAVE_AD_STATUS];

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

    _floatAdmob=strDefSetting.floatValue;//0.5;

【讨论】:

以上是关于如何为 NSUserDefault Keys 设置初始值?的主要内容,如果未能解决你的问题,请参考以下文章

如何为返回的 Set-Cookie 会话 ID 解析 HttpWebResponse.Headers.Keys

如何为每个给定的外键列表获取 n 项?

如何为django中的按钮绑定事件

如何为映射类型添加索引签名?

设置 NSUserDefault 崩溃

如何为 Cosmos DB 集合中的列创建唯一键?