1

我在 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。关于我应该在这里做什么的任何想法?

4

3 回答 3

6

正确的解决方案是不实际填充NSUserDefaults默认值。相反,请使用该registerDefaults:方法。

在应用程序启动时,您执行以下操作:

NSUserDefaults *default = [NSUserDefaults standardUserDefaults];
[defaults registerDefaults:@{
    @"Title" : @"4",
    @"Article" : @"3",
    @"verseKey" : @0
}];

而已。每次运行应用程序时调用它。这些默认值实际上并没有持久化。仅当键还没有显式值时才返回该值。您可以根据需要更新这些默认值,而不会影响任何现有值。

于 2012-11-24T20:34:48.583 回答
0

创建一个新的notFirstRun布尔值(即notFirstRunTwo)。对于现有用户来说,这也将是“不”。

于 2012-11-24T20:19:29.657 回答
0

我建议执行以下操作:

  • 检查存储的应用程序版本的 userdefaults 是否等于当前版本,如果不是。
  • 存储当前应用程序版本并进行首次启动初始化

    编码

`

 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
 ......
 }`
于 2012-11-24T20:38:13.503 回答