0

私はクイズゲームを持っています。答えが正しければ、チェックマークの付いた絵が現れます。私には多くのフィールドがあり、次の起動のために既に実行されているものをアプリに記憶させる必要があるためです。私は NSUserDefaults を使用しています。うまく機能していますが、問題は、最初の起動時にすべての「完了」画像が表示されることです。BOOL ロジックを回避しようとしましたが、成功しませんでした。

.h

BOOL doneState;

.m

- (void)viewDidLoad{

    [super viewDidLoad];
    [self doneHidden];
    [self checkBools];
} 

- (void)checkBools{

    //--------NSUserDefaults & tick sign hidden
    BOOL saved = [[NSUserDefaults standardUserDefaults] boolForKey:@"hiddenDone"];
    NSLog (@"Value of my saved BOOL = %@", saved ? @"YES" : @"NO");
    done.hidden = saved;
}

-(void)doneHidden{
   done.hidden = YES;
}

ユーザーがアプリを終了すると、以下のメソッドが BOOL 値を記憶します

-(IBAction)flipBack:(id)sender{

    if (done.hidden == NO) {
        doneState = NO;
    }
    else {
        doneState = YES;
    }

    [[NSUserDefaults standardUserDefaults] setBool:doneState forKey:@"hiddenDone"];
    NSLog (@"Value of BOOL 1  = %@", doneState ? @"YES" : @"NO");
}

アイデアは、最初に「done」という名前の imageView を非表示にしてから、BOOL を実行することです。コンソールは、そのように設定されていても、最初の起動時に非表示にならないという結果をもたらします。

コンソール出力:

Value of my saved BOOL = NO;

どうすればそのロジックを改善できますか?

  • 最初の起動時に画像を非表示にする
  • アプリを終了するときに、画像が表示されているかどうかを確認し、BOOL を作成します
  • 次の起動は BOOL を読み取り、以前に保存されている場合は画像を表示します。
4

1 に答える 1

4

3つのオプションがあります。

  1. BOOLtoの意味を変更して、画像を表示showImageするときにに設定しTRUEます。
  2. TRUEこのキーの値をで事前登録します-[NSUserDefaults registerDefaults:]
  3. を使用する代わりに、を使用してboolForKey:objectForKey:オブジェクトがnil(=まだ設定されていない)かどうかを最初に確認し、nilでない場合にのみ、を使用-[NSNumber boolValue]してブール値を取得します。
于 2013-02-23T12:20:52.823 に答える