I have a problem retrieving default values from the settings bundle when first launching an App. All non-multivalue fields return the default correctly. All multivalue field
I just ran into this problem and I ask myself why the settings bundle provides a default value, if this value can never be read from the NSUserDefaults
.
I created a swift extension that does the following:
So I can do this:
NSUserDefaults.standardUserDefaults().settignsStringValue("MYPREFS_DOMAIN", defaultValue: "domain.com")
This is the extension:
extension NSUserDefaults{
func settingsBoolValue(key: String, defaultValue: Bool) -> Bool{
// The case for Bool is different as it would return `false` when the key is not set.
if let v: AnyObject = self.objectForKey(key){
// The boolean value exists
} else {
self.setObject(defaultValue, forKey: key)
}
return self.boolForKey(key)
}
func settingsStringValue(key: String, defaultValue: String) -> String{
if let v = self.stringForKey(key){
return v
} else {
self.setObject(defaultValue, forKey: key)
return defaultValue
}
}
}
If the value wasn't changed by the user in the settings app there is no setting. The default value specified in the settings bundle is only the default for display in the settings app
you have to manually register your default values. NSUserdefaults doesn't use the defaults from the settings bundle.
Use something like this, add it at the beginning of your app (before you access the userdefaults).
Registered Userdefaults are not saved to disk or anything. You have to register them every time you start the app.
NSDictionary *userDefaultsDefaults = [NSDictionary dictionaryWithObjectsAndKeys:
@"15", @"upthreshold",
nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:userDefaultsDefaults];