6

NSUserDefaultsアプリを初めて開いたときに何らかのコードを使用して実行するのが私のアプリケーションの最初の起動であるかどうかを確認するにはどうすればよいですか?

4

4 に答える 4

20

これはあなたを正しい方向に向けるはずです:

static NSString* const hasRunAppOnceKey = @"hasRunAppOnceKey";
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
if ([defaults boolForKey:hasRunAppOnceKey] == NO)
{
    // Some code you want to run on first use...
    [defaults setBool:YES forKey:hasRunAppOnceKey];
}
于 2012-07-07T00:42:39.033 に答える
2

NSUserDefaultsの答えが私の頭に浮かんだ最初のことですが、振り返ってみると、別の提案をします。もう少し作業が必要ですが、検討する価値があります。その動機は次のとおりです。アプリのトラブルシューティングを行う場合、Appleはそのアプリのplistファイルを削除することをお勧めします。これは、かなりユビキタスなトラブルシューティング手法です。NSUserDefaultsではなくplistファイルにブール値を保存することをお勧めします。

免責事項:私はiOS開発のみを行っているため、NSUserDefaultsとplistがMacでどのように相互作用するかわかりません。また、plistを〜/ Library / Application \ Support /Preferences/に配置するために何が関係しているかわかりません。 com.mycompany.MyAppName.plist

とにかく、これに必要なのは、実際に「新しい」plist(おそらくバンドル内のテンプレートファイルからのコピー)を作成できるコードがあることだと思います。アプリが起動してplistが表示されない場合は、これを実行します。デフォルトのplistには、ユーザーが「初回」コードをスキップできるようにするフラグを含めるべきではありませんが、以前にアプリを開いてからplistを削除したことがある場合は、デフォルトの動作に戻す必要があります。

これは、可能な場合にサポートし、アプリで問題が発生した場合にユーザーを支援するための重要な動作です。

于 2012-07-07T00:52:58.913 に答える
2
if (![[NSUserDefaults standardUserDefaults] boolForKey:@"hasBeenLaunched"]) {
    // Run code on the first launch only ...
    [defaults setBool:YES forKey:@"hasBeenLaunched"];
}

NSUserDefaults を使用して、ブール、整数、オブジェクトをプログラムに保存し、プログラムを開くたびに利用できるようにすることができます。「boolForKey」を使用して、「hasBeenLaunched」というフラグを設定できます。デフォルトでは、設定されていない場合、この値は NO になります。YES に変更すると、if 条件のコードは二度と実行されません。

于 2014-12-26T21:43:18.270 に答える
1

メイン コントローラー クラスで、次のようなものを実装します。

static NSString * const MDFirstRunKey  = @"MDFirstRun";


@implementation MDAppController

+ (void)initialize {
   NSMutableDictionary *defaults = [NSMutableDictionary dictionary];
   [defaults setObject:[NSNumber numberWithBool:YES] forKey:MDFirstRunKey];
   [[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
   // the following if on Mac and is necessary:
   [[NSUserDefaultsController sharedUserDefaultsController] setInitialValues:defaults];
}

- (void)applicationDidFinishLaunching:(NSNotification *)notification {

  BOOL firstRun = [[[NSUserDefaults standardUserDefaults]
                      objectForKey:MDFirstRunKey] boolValue];

  if (firstRun) {
     // do something

     [[NSUserDefaults standardUserDefaults] setObject:
                [NSNumber numberWithBool:NO] forKey:MDFirstRunKey];

  } else {
     // do something else

  }
}

@end

+initializeクラス メソッドは、それが含まれているクラスのインスタンスが作成される前に呼び出されます。つまり、非常に早い段階で呼び出され、デフォルト値を設定するのに適した場所です。

詳細については、設定と設定のプログラミング ガイド: アプリの既定の設定を登録するを参照してください。

于 2012-07-07T01:30:49.410 に答える