objective-c - NSUserDefaults registerDefaults bool 值 YES 返回 NO

标签 objective-c cocoa nsuserdefaults

我已经在谷歌和这里搜索过,到目前为止还没有运气。

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

主要区别在于 key 的否定(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

这是一个错误还是我忽略了某些东西?我只是出于好奇而问,因为在链接的线程中使用原始 key 效果很好。

最佳答案

您将默认值设置为字符串,但将其读取为 BOOL。 将寄存器默认调用更改为与此类似:

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

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

关于objective-c - NSUserDefaults registerDefaults bool 值 YES 返回 NO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31684054/

相关文章:

ios - 如何为 NSAttributedString 设置动画?

ios - 如何从 AnyObject 转换 UserDefault 值?到一个 Int 这样我就可以保存它

iOS Swift 将 Realm 对象存储到 UserDefaults.standard

ios - 使用 NSUserDefaults 通过首次启动应用程序将开关位置设置为 ON

iphone - NSDateFormatter,我做错了什么还是这是一个错误?

ios - 在 MKMapView 上更新和组织覆盖

iphone - 获取异常为 "Collection was mutated while being enumerated"

cocoa - 让 NSButton 成为 Cocoa 中的超链接

macos - CKEditor 和 NSColorPanel : a mystery

iOS 相机 : `AVCaptureAudioDataOutput` activate audio session on the fly, 避免背景音乐卡顿