我有一个问答游戏,当答案正确时,会出现带有勾号的图片。因为我有很多字段,需要应用程序记住哪些已经为下次发布做了。我正在使用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;
我如何改进它的逻辑?
答案 0 :(得分:4)
有三种选择:
BOOL
的含义更改为showImage
,以便在想要显示图像时将其设置为TRUE
。TRUE
-[NSUserDefaults registerDefaults:]
值
boolForKey:
而不是使用objectForKey:
,首先检查对象是否为nil
(=尚未设置),并且仅在非零时使用-[NSNumber boolValue]
获取布尔值。