Tengo una clase AppDelegate con el método +(void)initialize
que utilizo para registrar algunos valores predeterminados. Aquí está el código que utilizo:¿Cómo registrar los valores predeterminados del usuario utilizando NSUserDefaults sin sobreescribir los valores existentes?
+ (void)initialize {
NSDictionary *defaults = [NSDictionary dictionaryWithObjectsAndKeys:@"NO", @"fooKey", @"YES", @"barKey", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
}
También creé Preferences.xib que mantiene par de casillas de verificación (NSButton
) que el estado de visualización de preferencias. Están obligados a NSUserDefaultsController
con las mismas teclas (fooKey y barKey en este caso). Cada vez que ejecuto una aplicación y cambio los "valores predeterminados", se restauran en el siguiente lanzamiento de la aplicación.
¿Hay alguna manera de registrar "valores predeterminados predeterminados" sin sobrescribir los valores ya existentes? ¿Tal vez cada vez que construyo y lance una aplicación, su archivo de preferencias se está recreando? ¿Tal vez debería desvincular las casillas de verificación del NSUserDefaultsController
y mantener los valores de las claves yo mismo con algún código personalizado en el controlador de ventana de preferencias?
Me gustaría escuchar su implementación de elección para mantener los valores predeterminados del usuario.
Estoy utilizando Mac OS X 10.6.2 y 3.2.1 XCode
Asegúrese de que las casillas de verificación están obligados a, tecla del controlador "valores", modelo caminos clave "fooKey" "predeterminados de usuario del controlador compartido"/"barkey". De lo contrario tu código se ve bien para mí. – Costique
'@" NO "' no es un literal booleano; es una cadena literal para la palabra "NO". Debería usar '[NSNumber numberWithBool: NO]'; de lo contrario, los valores en los valores predeterminados del usuario no serán booleanos. –
No, no lo serán, pero si los leo como BOOL, lo harán. Extracto del libro de Daniel H Steinberg "Programación Cocoa" (pragprog.com): en realidad, no necesita ser tan explícito cuando coloca el BOOL en el diccionario. Podría pasar el valor SÍ o NO como una cadena y aún así crear un BOOL a partir de este valor cuando lea de las preferencias. – Eimantas