Mc.*_*ver 14 objective-c nsuserdefaults ios settings.bundle
我有一个带有settings.bundle的iOS应用程序,它可以处理我的应用程序的各种设置Switch toggle
.我在root.plist文件中设置了默认值(使用DefaultValue属性),YES
但是只要应用程序在设备或iOS模拟器上启动,所有值都会出现NO
.它只在第一次发布时运作良好.
我正在使用此代码检索默认值(我在这里做错了吗?):
NSUserDefaults *localeDefaults = [NSUserDefaults standardUserDefaults];
BOOL ENWORDS = [localeDefaults boolForKey:@"localetime"];
Run Code Online (Sandbox Code Playgroud)
Mat*_*uch 24
Settings.app使用默认值仅用于显示目的.如果您未更改设置应用程序中的值,则不会将任何内容保存到NSUserDefaults.
您必须自己注册默认值.使用这样的东西application:didFinishLaunchingWithOptions:
:
NSDictionary *userDefaultsDefaults = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], @"localetime",
nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:userDefaultsDefaults];
Run Code Online (Sandbox Code Playgroud)
dea*_*rne 22
这篇博客文章可能有所帮助:http://greghaygood.com/2009/03/09/updating-nsuserdefaults-from-settingsbundle
tl; dr - 直到用户打开设置页面,然后默认值不会复制到您的应用程序中.这是Apple的预期行为.
我个人认为这很可怕.这意味着您必须在代码中设置默认值,以防用户启动您的应用程序而无需先进入设置页面(大约99%的用例都是如此!)
Mom*_*omi 15
问题是类型default Value
必须boolean
不是string
;)删除此值并default Value
再次添加另一个属性希望这有帮助
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//< Register Defaults
NSString *settingsBundlePath = [[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"bundle"];
NSBundle *settingsBundle = [NSBundle bundleWithPath:settingsBundlePath];
NSString *rootPlistPath = [settingsBundle pathForResource:@"Root" ofType:@"plist"];
NSDictionary *settingsDict = [[NSDictionary alloc] initWithContentsOfFile:rootPlistPath];
NSArray *settingsItems = [settingsDict objectForKey:@"PreferenceSpecifiers"];
NSMutableDictionary *defaultDict = [NSMutableDictionary new];
for (NSDictionary *itemDict in settingsItems) {
if ([itemDict objectForKey:@"DefaultValue"]) {
[defaultDict setObject:[itemDict objectForKey:@"DefaultValue"] forKey:[itemDict objectForKey:@"Key"]];
}
}
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultDict];
//< Following Code
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14015 次 |
最近记录: |