我在AppStore中已经有一个使用NSUserDefaults的应用程序。一些默认设置是我在应用首次启动时设置的默认设置,然后允许用户稍后更改它们。所以,在我的AppDelegate appDidFinishLaunchingWithOptions中,我把:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (! [defaults boolForKey:@"notFirstRun"]) {
[defaults setBool:YES forKey:@"notFirstRun"];
[defaults setInteger:0 forKey:@"verseKey"];
[defaults synchronize];
}
我现在遇到的问题是我想在NSUserDefault类别中添加更多默认设置,所以我想让它看起来像这样:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (! [defaults boolForKey:@"notFirstRun"]) {
[defaults setBool:YES forKey:@"notFirstRun"];
NSString *smalltitle = @"4";
NSString *smallarticle = @"3";
[defaults setObject:smalltitle forKey:@"Title"];
[defaults setObject:smallarticle forKey:@"Article"];
[defaults setInteger:0 forKey:@"verseKey"];
[defaults synchronize];
}
我知道这会给那些已经下载了应用的人带来问题,并且只是更新它。他们不会运行该代码,因为notFirstRun Bool已经设置为YES。关于我应该在这做什么的任何想法?
答案 0 :(得分:6)
正确的解决方案是不使用默认值实际填充NSUserDefaults
。相反,请使用registerDefaults:
方法。
在应用启动时,您可以:
NSUserDefaults *default = [NSUserDefaults standardUserDefaults];
[defaults registerDefaults:@{
@"Title" : @"4",
@"Article" : @"3",
@"verseKey" : @0
}];
就是这样。每次运行应用程序时都调用此方法。这些默认值实际上不会保留。仅当密钥没有明确值时才返回该值。您可以在不影响任何现有值的情况下更新这些默认值。
答案 1 :(得分:0)
制作一个新的notFirstRun
布尔值(即notFirstRunTwo
)。对于现有用户来说,这也是“不”。
答案 2 :(得分:0)
我建议您执行以下操作:
存储当前应用版本并执行首次启动初始化
代码
`
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *appVersion = [NSString stringWithFormat:@"%@",[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]];
if (! [defaults objectForKey:appVersion ])
{
/// store the current version and then do your first run functions
[defaults setObject:[NSNumber numberWithInt:1] forKey:appVersion];
/// here do your first run
......
}`