デフォルト設定を定義しても、それらは実際には値として保存されません。それらはデフォルトとして保存されます。読み取ろうとすると、値は null です。デフォルト設定は、値とは別のプロパティです。ただし、デフォルト値をデフォルトとして書き込むという意味ではありません。
私がすることは、最初に、何らかの設定(値があるはずだと確信しています)に何かが保存されているかどうかを確認することです。何もない場合は、すべてのデフォルトを書き込みます。
ここに例があります。
AppDelegate.m でemail_notificaciones_preferenceに値があるかどうかを確認し、そうでない場合は、すべてのデフォルト設定を各設定に書き込みます。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
NSUserDefaults * standardUserDefaults = [NSUserDefaults standardUserDefaults];
NSString * email_notificaciones_preference = [standardUserDefaults objectForKey:@"email_notificaciones_preference"];
if (!email_notificaciones_preference) {
[self registerDefaultsFromSettingsBundle];
}
}
この関数は、各要素にデフォルトを書き込むために使用するものです。
#pragma NSUserDefaults
- (void)registerDefaultsFromSettingsBundle {
// this function writes default settings as settings
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"]];
NSArray *preferences = [settings objectForKey:@"PreferenceSpecifiers"];
NSMutableDictionary *defaultsToRegister = [[NSMutableDictionary alloc] initWithCapacity:[preferences count]];
for(NSDictionary *prefSpecification in preferences) {
NSString *key = [prefSpecification objectForKey:@"Key"];
if(key) {
[defaultsToRegister setObject:[prefSpecification objectForKey:@"DefaultValue"] forKey:key];
NSLog(@"writing as default %@ to the key %@",[prefSpecification objectForKey:@"DefaultValue"],key);
}
}
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultsToRegister];
}
それが役立つことを願っています。