cocoa - from - swift 4.2 userdefaults
¿Cómo registrar los valores predeterminados del usuario utilizando NSUserDefaults sin sobreescribir los valores existentes? (1)
De la documentación para -registerDefaults:
(énfasis agregado):
Los contenidos del dominio de registro no están escritos en el disco; necesita llamar a este método cada vez que se inicia su aplicación . Puede colocar un archivo plist en el directorio de Recursos de la aplicación y llamar a registerDefaults: con los contenidos que haya leído desde ese archivo.
Entonces tu código estaba en el camino correcto. Así es como registra los valores predeterminados por defecto.
Usualmente uso esto en -applicationDidFinishLaunching:
:
// Load default defaults
[[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Defaults" ofType:@"plist"]]];
Usar un plist hace que sea fácil agregar y cambiar los valores predeterminados en su aplicación, y también evita que cometa el error de usar @"NO"
como valor.
Edición: variante Swift 3 :
UserDefaults.standard.register(defaults: NSDictionary(contentsOf: Bundle.main.url(forResource: "Defaults", withExtension: "plist")!)! as! [String : Any])
Tengo una clase AppDelegate con el método de +(void)initialize
que uso para registrar algunos valores predeterminados. Aquí está el código que uso:
+ (void)initialize {
NSDictionary *defaults = [NSDictionary dictionaryWithObjectsAndKeys:@"NO", @"fooKey", @"YES", @"barKey", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
}
También creé Preferences.xib que contiene un par de casillas de verificación ( NSButton
) que muestran el estado de las preferencias. Están vinculados a NSUserDefaultsController
con las mismas claves (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 forma 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 de 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 preferida para mantener los valores predeterminados del usuario.
Estoy usando Mac OS X 10.6.2 y XCode 3.2.1