Eğer varsayılan ayarları tanımlamak rağmen
Yardım beni, onlar gerçekten bir değer olarak depolanmaz. Varsayılan olarak saklanırlar. Okumaya çalışırsanız, değer boştur. Varsayılan ayar, değer olarak başka bir özelliktir. Fakat bu, varsayılan değeri varsayılan olarak yazacağı anlamına gelmez.
Yaptığım şey, önce, bir ayarın (bir değere sahip olduğundan eminim) üzerinde kayıtlı bir şey olup olmadığını kontrol etmektir. Eğer bir şey yoksa o zaman tüm varsayılanları yazarım.
İşte bir örnek.
AppDelegate.m'de email_notificaciones_preference'un bir değerinin olup olmadığını kontrol edin, yoksa, her ayar için TÜM varsayılan ayarları yazarım.
- (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];
}
}
Bu işlev, her bir öğeye varsayılan değerler yazmak için kullandığım şeydir.
#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];
}
Bu yardımcı olur umarım.
teşekkürler! –
Çok hoş bir çözüm - Onu Swift'e çevirdim ve birisinin buna ihtiyacı varsa cevap olarak ekledim. – Compufreak
[[NSUserDefaults standardUserDefaults] senkronize olmalı]; 'Ayrıca eklenmeli mi? –