我有一个问答游戏,当答案正确时,会出现一张带有勾号的图片。因为我有很多领域,需要应用程序记住哪些已经完成,以便下次启动。我正在使用 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 并显示图像(如果之前保存过)