2011-08-11 7 views
1

使用してアプリの初回起動を検出:私はNSUserDefaultsリンゴの参照を見上げiPhone: How do I detect when an app is launched for the first time?は、次の質問を参照してNSUserDefaults

は、それがregisterDefaultsは、ディスク上にデータが格納されていないと述べました。上記の質問では、各起動時に値firstLaunchYESに登録します。したがって、アプリが起動されるたびにfirstLaunchYESに上書きされ、アプリはこれがアプリの最初の起動であると常に考えます。

私はこの問題に直面していますか?

EDIT:

上記のチュートリアルの言うことをやった後、それは常にとにかく動作しません。私はXcodeからリニューアルを続け、最初の打ち上げ時と同じように1ブール値を印刷し続けます。

答えて

5

registerDefaults:にこのような何かを試してみては、デフォルトでは、すでにあるものを上書きしませんが、それはデフォルト-用-デフォルトを設定します。デフォルトがない場合は、default-defaultが使用されます。混乱しているのではないですか?

FirstLaunchの値を書き込んだことがない場合は、boolForKey:@"FirstLaunch"registerDefaults:の値を使用します。しかし、前もってsetBool:NO forKey:@"FirstLaunch"を実行した後にもう一度boolForKey:を入力した場合は、registerDefaults:の値は使用されません。

-1

いいえまず最初にnilに設定し、yesに設定してからyesに設定する前にyesに設定されているかどうかを確認します。だから、もしあなたがキーのために何かを得るならば、初めてuserDefaultsはnilを返します。 like

[[NSUserDefaults standardUserDefaults] valueForKey:@"FirstLaunch"]; 

は、アプリケーションの最初の起動時にnilを返します。

+0

申し訳ありませんが、分かりません。あなたの答えは明らかではありません..私の質問は、 'registerDefaults:'は 'applicationDidFinishLaunching'以降の起動時に' firstLaunch'を 'YES'に設定しています。したがって、このメソッドが実行されるたびに、terminateメソッドでは 'NO'に設定されていても、' firstLaunch'は 'YES'に上書きされます。 – darksky

0

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ 

if ([[[NSUserDefaults standardUserDefaults] valueForKey:@"firstRun"] intValue]==0) { 
     //do the stuff required at first launch 


//after stuff done 
    [[NSUserDefaults standardUserDefaults] setValue:[NSNumber numberWithInt:1] forKey:@"firstRun"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 

    } 

}

+0

私はすべての方法を試しました - それは常に最初の打ち上げとして私のアプリを検出します!何故ですか?? – darksky

+0

うわー - 実際にあなただけが働く唯一の方法です。それは '同期'ですか?それは何ですか? – darksky

+0

これは定期的にosによって呼び出されますが、その瞬間にNSUserDefaultsの同期を強制するために使用できます – kviksilver

1

registerDefaults:は既存の値を上書きしませんが、まだ値に設定されていない値のみを初期化します。

関連する問題