NSUserDefaults

La principal aplicación de esta clase es para manejar la configuración de nuestras aplicaciones. El siguiente código obtiene el objeto NSUserDefaults que gestiona la configuración de nuestra aplicación:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

Si esta no existe (ya sea porque es la primera vez que se lanza nuestra aplicación o porque ha sido eliminada) se crea una configuración vacía. El objeto defaults así obtenido, nos permite obtener valores para diferentes llaves. Es decir, cadenas de texto bajo las cuales almacenamos ciertos valores. Por ejemplo, una aplicación de documentos puede almacenar el alto y el ancho del visor de documentos. En este caso, podemos utilizar algo como:

int alto = [defaults integerForKey: @"AlturaVisor"];
int ancho = [defaults integerForKey: @"AnchuraVisor"];

Estos métodos están diseñados para retornar el valor 0 en caso de que no se encuentren los valores pedidos (ya sea porque es la primera vez que se lanza nuestra aplicación o porque ha sido eliminada) en tal caso podemos establecer los valores por defecto, por ejemplo:

if (altura == 0)
{
    //Establecer el valor por defecto para la altura del visor
    [visor setHeight: 80];
  }

Los siguientes métodos pueden usarse para leer valores u objetos. A la derecha (después de la doble diagonal) se indica el valor retornado si no existe la llave indicada:

  • – (NSArray *) arrayForKey: (NSString *)defaultName   //nil
  • – (BOOL) boolForKey: (NSString *)defaultName   //NO
  • – (NSData *) dataForKey: (NSString *)defaultName   //nil
  • – (NSDictionary *) dictionaryForKey: (NSString *)defaultName   //nil
  • – (float) floatForKey: (NSString *)defaultName   //0.0
  • – (NSInteger) integerForKey: (NSString *)defaultName   //0
  • – (id) objectForKey: (NSString *)defaultName   //nil
  • – (NSArray *) stringArrayForKey: (NSString *)defaultName   //nil
  • – (NSString *) stringForKey: (NSString *)defaultName   //nil

Los valores establecidos por el usuario (por ejemplo, en el panel de configuración) pueden también almacenarse. Para nuestro ejemplo del visor de documentos tendríamos algo como:

[defaults setInteger: height forKey: @"AlturaVisor"];
[defaults setInteger: width forKey: @"AnchuraVisor"];

Otro métodos que pueden utilizarse son:

  • – (void) setBool: (BOOL)value forKey: (NSString *)defaultName
  • – (void) setFloat: (float)value forKey: (NSString *)defaultName
  • – (void) setInteger: (NSInteger)value forKey: (NSString *)defaultName
  • – (void) setObject: (id)value forKey: (NSString *)defaultName

Este último método es el utilizado para guardar objetos NSArray, NSDictionary, NSData, etc. La configuración de una aplicación dada, puede borrarse desde una terminal con:

defaults delete AppName

O para borrar una llave determinada:

defaults delete AppName nombreLlave

Para más información véase la documentación oficial.