Pregunta

Necesito guardar un Nsmutabledictiony en NSUSERDEFAULS.He buscado en la web para muchos ejemplos, pero no he recibido ninguno de los que sean lo suficientemente relevantes.¿Alguien puede publicar una pequeña pieza de código que ahorrará una NSMutabledictionary en NSUSERDEFAULTS en el cierre y recuperarlo en el lanzamiento de la aplicación?También podría decirme dónde colocar el código.

Yo mismo tengo un código, pero no funciona.

appdelegate.h - Recuperación de datos

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    // Override point for customization after application launch.

      NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
      NSData *dat = [defaults objectForKey:@"theKey"];
      tmpArray  = [[NSMutableArray alloc] init];
      tmpArray = [NSKeyedUnarchiver unarchiveObjectWithData:dat];

      [self.window makeKeyAndVisible];
      [window addSubview:tabBarController.view];
      return YES;
}

appdelegate.h - Almacenamiento de datos

- (void)applicationWillTerminate:(UIApplication *)application {

      [self saveContext];
      NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
      NSData *dat = [NSKeyedArchiver archivedDataWithRootObject:tmpArray];
      [defaults setObject:dat forKey:@"theKey"];
}

Sí, es para una matriz, pero necesitaré uno para un Nsmutabledictiony.

¿Fue útil?

Solución

La discusión de aplicationwillterminate:

Para aplicaciones que no admiten la ejecución de fondo o están vinculadas contra iOS 3.x o antes, este método siempre se llama cuando el usuario abandona la aplicación. Para aplicaciones que admiten la ejecución de fondo, este método generalmente no se llama cuando el usuario abandona la aplicación porque la aplicación simplemente se mueve al fondo en ese caso. Sin embargo, este método puede llamarse en situaciones donde la aplicación se está ejecutando en el fondo (no suspendido) y el sistema necesita terminarlo por alguna razón.

Para guardar su objeto, debe poner su código en sillydidenternerbackground: también.

En iOS 4.0 y posterior, este método se llama en lugar de la aplicaciónwillterminato: Método cuando el usuario abandona una aplicación que admite la ejecución de fondo. Debe usar este método para publicar los recursos compartidos, guardar datos de usuario, invalidar los temporizadores y almacenar suficiente información de estado de la aplicación para restaurar su solicitud a su estado actual en caso de que se termine más tarde. También debe deshabilitar las actualizaciones a su aplicación Interfaz de usuario y evite utilizar algunos tipos de recursos del sistema compartido (como la base de datos de contactos del usuario). También es imperativo que evite usar OpenGL ES en el fondo.


Para guardar un diccionario en lugar de una matriz, simplemente reemplace todas las ocurrencias de matriz con el diccionario


y fijar la fuga

tmpArray  = [[NSMutableArray alloc] init]; // not used, not released but `alloc`ed.
tmpArray = [NSKeyedUnarchiver unarchiveObjectWithData:dat];

eliminando la primera línea.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top