1

NSUserDefaultsを使用するアプリがすでにAppStoreにあります。デフォルトのいくつかは、アプリを最初に起動したときに設定したデフォルト設定であり、ユーザーは必要に応じて後で変更することができます。したがって、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)。これは、既存のユーザーにとっても「NO」になります。

于 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 に答える