6

UIAlertViewアプリの起動時にポップアップを表示するために を使用しています。正常に動作しますが、アプリの最初の起動時にポップアップを表示したいだけです。現時点UIAlertViewでは、AppDelegateクラス内、applicationDidFinishLaunchingメソッド内にあります。これが私のコードです:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
sleep(4);
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Welcome!" message:@"SAMPLE!!!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];

私はアプリ開発に慣れていないので、これが単純な場合は申し訳ありません。

4

5 に答える 5

10

アプリが初めて実行されるかどうかを判断するには、この情報を保存する永続変数が必要です。NSUserDefaultsは、これらの単純な構成値を格納する最良の方法です。

例えば、

-(BOOL)application:(UIApplication *)application … {
    NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
    if (! [defaults boolForKey:@"notFirstRun"]) {
      // display alert...
      [defaults setBool:YES forKey:@"notFirstRun"];
    }
    // rest of initialization ...
}

ここでは、構成から名前が[defaults boolForKey:@"notFirstRun"]付けられたブール値を読み取りますnotFirstRun。これらの値は NO に初期化されます。したがって、この値が NO の場合、ifブランチを実行してアラートを表示します。

完了したら、[defaults setBool:YES forKey:@"notFirstRun"]このブール値を YES に変更して、ifブランチが再度実行されないようにします (ユーザーがアプリを削除しないと仮定します)。

于 2010-04-05T14:29:09.080 に答える
4
- (void) displayWelcomeScreen
{
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    NSString *alreadyRun = @"already-run";
    if ([prefs boolForKey:alreadyRun])
        return;
    [prefs setBool:YES forKey:alreadyRun];
    UIAlertView *alert = [[UIAlertView alloc]
        initWithTitle:@"…"
        message:@"…"
        delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
    [alert show];
    [alert release];
}
于 2010-04-05T14:28:40.837 に答える
3

最初に 0 に設定され、最初にアラートを表示した後に 1 に設定されている NSUserDefault を使用します。

//default value is 0
[settings registerDefaults:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:0] forKey:@"HAVE_SHOWN_REMINDER"]];
    BOOL haveShownReminder = [settings boolForKey:@"HAVE_SHOWN_REMINDER"];  
    if (!haveShownReminder)
{
    //show your alert

    //set it to 1
    [[NSUserDefaults standardUserDefaults]  setObject:[NSNumber numberWithInt:1] forKey:@"HAVE_SHOWN_REMINDER"];    
}
于 2010-04-05T14:27:43.477 に答える
2

シンプルな3行

-(BOOL)application:(UIApplication *)applicationBlahBlah {
    if(![[[NSUserDefaults standardUserDefaults] objectForKey:@"NOT_FIRST_TIME"] boolValue])
    {
        [[[[UIAlertView alloc] initWithTitle:nil message:@"message" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil] autorelease] show];
        [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithBool:YES] forKey:@"NOT_FIRST_TIME"];
        [[NSUserDefaults standardUserDefaults] synchronize];
    }
}
于 2013-02-20T14:42:36.833 に答える
1

上記の解決策はほとんどの場合に機能するはずなので、現時点では以下についてもお知らせします。

Apple ドキュメントには次のように書かれています: NSUserDefaults クラスは現在、ホストごとの設定をサポートしていません。これを行うには、CFPreferences API を使用する必要があります。参照NSUserDefaults

そして、これに関する議論はこちら

于 2011-08-17T10:08:32.897 に答える