NSUserDefaults BOOL逻辑

时间:2013-02-23 11:42:31

标签: ios boolean nsuserdefaults

我有一个问答游戏,当答案正确时,会出现带有勾号的图片。因为我有很多字段,需要应用程序记住哪些已经为下次发布做了。我正在使用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并显示图像(如果之前保存为

1 个答案:

答案 0 :(得分:4)

有三种选择:

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