Macos NSUserDefaults重置为registeredDefaults
我有一个名为showsguidelines的默认设置,即用户是否希望在拖动文档中的项目时显示指南 使用下面我的两个助手方法设置和查询默认值对于应用程序的生命周期非常有用。但一旦应用程序重新启动,我就会遇到奇怪的问题Macos NSUserDefaults重置为registeredDefaults,macos,cocoa,nsuserdefaults,Macos,Cocoa,Nsuserdefaults,我有一个名为showsguidelines的默认设置,即用户是否希望在拖动文档中的项目时显示指南 使用下面我的两个助手方法设置和查询默认值对于应用程序的生命周期非常有用。但一旦应用程序重新启动,我就会遇到奇怪的问题 事情就是这样 我将showsguidelines设置为否 我重新启动应用程序 调用registerDefaults后,我验证showsguidelines是否仍然是否。([AppPreferences registerDefaults]从应用程序委托的初始化中调用。) 下次查询sh
事情就是这样
我已经通过向键showsguidelines的[NSUserDefaults standardUserDefaults]添加观察者,验证了该值从未在应用程序的任何其他位置设置为YES。这也不是一个同步问题,因为我已经在应用程序启动时验证了该值是否正确 知道我做错了什么吗
// AppPreferences.m
#import "AppPreferences.h"
@implementation AppPreferences
+ (void)registerDefaults {
NSURL *defaultPrefsFile = [[NSBundle mainBundle] URLForResource:@"DefaultPreferences"
withExtension:@"plist"];
NSDictionary *defaultPrefs = [NSDictionary dictionaryWithContentsOfURL:defaultPrefsFile];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultPrefs];
NSLog(@"-register: %@", [PCAppPreferences showsGuidelines] ? @"YES" : @"NO");
}
#pragma mark - showsGuidelines
+ (BOOL)showsGuidelines {
return [[NSUserDefaults standardUserDefaults] boolForKey:@"showsguidelines"];
}
+ (void)setShowsGuidelines:(BOOL)showsGuidelines {
NSLog(@"-set showsguidelines: %@", [[NSUserDefaults standardUserDefaults] boolForKey:@"showsguidelines"] ? @"YES" : @"NO");
[[NSUserDefaults standardUserDefaults] setBool:showsGuidelines forKey:@"showsguidelines"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
@end
// Called on App Launch
2014-03-26 14:27:53.035 AppName[30636:303] -set showsguidelines: NO
2014-03-26 14:27:53.035 AppName[30636:303] -register: NO
// Called shortly afterward
2014-03-26 14:27:58.324 AppName[30636:303] -set showsguidelines: YES
2014-03-26 14:27:58.325 AppName[30636:303] -set showsguidelines: YES
2014-03-26 14:27:58.342 AppName[30636:303] -set showsguidelines: YES
确保您确实退出了应用程序,而不仅仅是从Xcode“运行”更新的版本。否则,将永远不会写出默认值。因此,启动应用程序时没有默认设置(默认设置为
no
),而不是实际的no
默认设置。因此,当您注册默认值时,它会看到该名称没有默认值,现在注册的默认值将接管,它将变成YES
您始终可以使用命令行
defaults read my.app.identifier
检查已启动的默认设置。感谢您的帮助。但这不是问题所在。如果未保存任何内容(在我的DefaultPreferences.plist中指定),则在注册默认值后注销的“否”在第一次启动时应为“是”。不管怎样,我只是尝试了你的建议,退出了应用程序,然后从磁盘(不是Xcode)运行了应用程序。但同样的事情正在发生。