具有布尔值YES的NSUserDefaults registerDefaults返回NO

时间:2015-07-28 18:11:33

标签: objective-c cocoa nsuserdefaults

我在google上搜索过,到目前为止还没有运气。

为了确定我的应用程序之前是否已经启动,我使用的代码类似于this StackOverflow answer中的代码。

主要区别在于否定了密钥(FirstLaunch而不是HasLaunched):

configuration = [NSUserDefaults standardUserDefaults];
[configuration registerDefaults:[[NSDictionary alloc] initWithObjectsAndKeys:@"YES", @"FirstLaunch", nil]];
if ([configuration boolForKey:@"FirstLaunch"]) {
    NSLog(@"aha");
    // aha
    [configuration setBool:NO forKey:@"FirstLaunch"];
    [configuration synchronize];
}

除非我以编程方式将@"aha"密钥设置为@"FirstLaunch",否则永远不会记录重要的YES邮件。

这是一个错误还是我忽略了什么?我只是出于好奇而要求,因为在链接线程中使用原始密钥可以正常工作。

1 个答案:

答案 0 :(得分:4)

您正在将默认值设置为字符串,但将其作为BOOL读取。 将寄存器默认值调用更改为:

[configuration registerDefaults:[[NSDictionary alloc] initWithObjectsAndKeys:@YES, @"FirstLaunch"]];

您可能应该在该if块中将FirstLaunch值设置为NO