0

アプリの存続期間中に特定のビューがロードされたかどうかを確認しようとしています。次のコードを実装しましたが、なぜ機能しないのかよくわかりません。ビューコントローラのviewDidLoadメソッドのみで行われています(これが問題なのかもしれません)。誰かが私の間違いを教えていただければ幸いです。ありがとう!

 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
 BOOL hasRunBefore = [defaults boolForKey:@"FirstRun"];
                     if (hasRunBefore) {
                         NSLog (@"not the very first time this controller has been loaded");
                          [defaults setBool:YES forKey:@"FirstRun"];
                         [defaults synchronize];
                     }
                     else if (!hasRunBefore) {
                         [defaults setBool:NO forKey:@"FirstRun"];
                          NSLog (@"the very first time this controller has been loaded");
                         [defaults synchronize];
                     }
4

3 に答える 3

2

コードにいくつかの間違いがあります。以下の修正を参照してください。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
BOOL hasRunBefore = [defaults boolForKey:@"FirstRun"];

if (hasRunBefore) {
    NSLog (@"not the very first time this controller has been loaded");
    /* Toggle the boolean state */
    [defaults setBool:NO forKey:@"FirstRun"];
}
else if (!hasRunBefore) {
    /* Toggle the boolean state */
    [defaults setBool:YES forKey:@"FirstRun"];
    NSLog (@"the very first time this controller has been loaded");
}
[defaults synchronize];

ただし、if(hasRunBefore)でFirstRunをNOに戻す理由がわかりません。私は何が悪いのかを指摘するだけです、あなたはあなたの論理をもう一度チェックしたいかもしれません。

-編集-私があなたの論理について指摘したように、あなたはこれだけを持っているべきです:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
BOOL hasRunBefore = [defaults boolForKey:@"FirstRun"];

if (!hasRunBefore) {
    [defaults setBool:YES forKey:@"FirstRun"];
    [defaults synchronize];
    NSLog (@"the very first time this controller has been loaded");
}
else
    NSLog (@"Not the first time this controller has been loaded");
于 2012-08-11T03:37:34.923 に答える
1

デフォルトで設定された値は、アプリがデバイスにインストールされている限り永続的です。

アプリのデリゲートに設定された BOOL 値の使用を検討する必要があります (これは実行ごとに保持されません)。

また

次のメソッドで、アプリのデリゲートで "FirstRun" を NO に戻す必要があります。

- (void)applicationWillTerminate:(UIApplication *)application
于 2012-08-11T01:56:25.527 に答える
1

NSUserDefaults も可能ですが、静的を使用して、View Controller が初めて読み込まれたときにBOOL設定することもできます。YES

于 2012-08-11T02:04:10.950 に答える