NSUserDefaults BOOL逻辑

我有一个问答游戏,当答案是正确的,一个带勾号的图片将出现。 由于我有很多领域,需要应用程序来记住哪些已经完成下一次启动。 我正在使用NSUserDefaults。 它工作的很好,但问题是,在第一次启动时,所有“完成”图像都显示出来。 我试图绕过布尔逻辑,但没有成功。

。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。 控制台在第一次启动时给出的结果是不隐藏的,尽pipe它是这样设置的。

控制台输出:

 Value of my saved BOOL = NO; 

我怎样才能改善它的逻辑?

  • 在首次发布时隐藏图片
  • 退出应用程序时检查图像是否可见并创buildBOOL
  • 下一步启动阅读BOOL和显示图像,如果以前保存如此

有三个选项:

  1. BOOL的含义更改为showImage以便在显示图像时将其设置为TRUE
  2. 在此注册一个TRUE-[NSUserDefaults registerDefaults:]
  3. 而不是使用boolForKey: ,使用objectForKey:并首先检查对象是否为nil (=尚未设置),并且只有在非零时,才使用-[NSNumber boolValue]来获取布尔值。