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和显示图像,如果以前保存如此
有三个选项:
- 将
BOOL
的含义更改为showImage
以便在显示图像时将其设置为TRUE
。 - 在此注册一个
TRUE
值-[NSUserDefaults registerDefaults:]
- 而不是使用
boolForKey:
,使用objectForKey:
并首先检查对象是否为nil
(=尚未设置),并且只有在非零时,才使用-[NSNumber boolValue]
来获取布尔值。