我正在应用程序设置中使用我的应用程序ToggleSwitch。我的设置在plist文件中。
Toggle Switch Elements are these:
Type (required) = Toggle Switch
Title (required, localizable) = MyToggle
Key (required) = enabled_preference
DefaultValue (required) = (BOOL) YES;
Value for ON = (BOOL) YES
Value for OFF = (BOOL) NO在app中,我这样做是为了识别:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
BOOL enabled = [defaults boolForKey:@"enabled_preference"];
NSLog(@"enabled = %i",enabled);但是当我第一次安装app的时候,切换开关是打开的,但是enabled = false。我不明白为什么?
另外,也许一些可以帮助如何在该设置plist文件中进行本地化?
发布于 2012-01-26 16:48:02
这是因为在第一次启动时,设置包中的设置还没有加载到NSUserDefaults。您必须编写一个方法来设置默认值并将其注册到registerDefaults,然后将其添加到application:didFinishLaunchingWithOptions:或每次启动时执行的任何其他方法中。
发布于 2012-09-28 00:35:47
将此代码添加到AppDelegate中的AppDelegate启动方法中,它会在第一次启动时为您注册所有默认值。
- (void)registerDefaultsFromSettingsBundle
{
/*
before a user saves a nsdefault the entries in the settings bundle config file are not registereed.
The function loops through each preference in the root.plist of the settings.bundle file and registers each key that is not readable (therefore not registered).
*/
//NSLog(@"Registering default values from Settings.bundle");
NSUserDefaults * defs = [NSUserDefaults standardUserDefaults];
[defs synchronize];
NSString *settingsBundle = [[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"bundle"];
if(!settingsBundle)
{
NSLog(@"Could not find Settings.bundle");
return;
}
NSDictionary *settings = [NSDictionary dictionaryWithContentsOfFile:[settingsBundle stringByAppendingPathComponent:@"Root.plist"]];
if(!settings)
return;
NSArray *preferences = [settings objectForKey:@"PreferenceSpecifiers"];
if(!preferences)
return;
NSMutableDictionary *defaultsToRegister = [[NSMutableDictionary alloc] initWithCapacity:[preferences count]];
for (NSDictionary *prefSpecification in preferences)
{
NSString *key = [prefSpecification objectForKey:@"Key"];
if (key)
{
// check if value readable in userDefaults
id currentObject = [defs objectForKey:key];
if (currentObject == nil)
{
// not readable: set value from Settings.bundle
id objectToSet = [prefSpecification objectForKey:@"DefaultValue"];
[defaultsToRegister setObject:objectToSet forKey:key];
// NSLog(@"Setting object %@ for key %@", objectToSet, key);
}
}
}
[defs registerDefaults:defaultsToRegister];
[defaultsToRegister release];
[defs synchronize];
}https://stackoverflow.com/questions/9015313
复制相似问题