如何为 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】:您应该使用NSUserDefaults
的registerDefaults
方法。在您的包中准备一个包含默认首选项的 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 设置初始值?的主要内容,如果未能解决你的问题,请参考以下文章