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

有三个选项:

  1. 更改 to 的含义,BOOL以便showImageTRUE要显示图像时将其设置为。
  2. 为这个键预先注册一个TRUE-[NSUserDefaults registerDefaults:]
  3. 而不是使用boolForKey:,使用objectForKey:并首先检查对象是否nil(=尚未设置),并且仅当非零时才使用-[NSNumber boolValue]来获取布尔值。
于 2013-02-23T12:20:52.823 回答