Domanda

Devo salvare un NSMutableDictionary in NSUserDefaults.Ho cercato molti esempi sul Web, ma non ne ho ricevuto nessuno sufficientemente pertinente.Qualcuno può pubblicare un piccolo pezzo di codice che salverà un NSMutableDictionary in NSUserDefaults allo spegnimento e lo recupererà all'avvio dell'app?Potresti anche dirmi dove posizionare il codice.

Ho anch'io del codice, ma non funziona.

appDelegate.h - recupero dei dati

- (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 - archiviazione dei dati

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

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

Sì, è per un array, ma ne avrò bisogno per un NSMutableDictionary.

È stato utile?

Soluzione

La discussione di applicationWillTerminate:

Per le applicazioni che non supportano l'esecuzione in background o sono collegate a iOS 3.x o versioni precedenti, questo metodo viene sempre chiamato quando l'utente chiude l'applicazione. Per le applicazioni che supportano l'esecuzione in background, questo metodo in genere non viene chiamato quando l'utente chiude l'applicazione perché in questo caso l'applicazione passa semplicemente in background. Tuttavia, questo metodo può essere chiamato in situazioni in cui l'applicazione è in esecuzione in background (non sospesa) e il sistema deve terminarla per qualche motivo.

Per salvare il tuo oggetto dovresti inserire il tuo codice in applicationDidEnterBackground: pure.

In iOS 4.0 e versioni successive, questo metodo viene chiamato invece dell'applicazioneWillTerminate:metodo quando l'utente esce da un'applicazione che supporta l'esecuzione in background.Dovresti utilizzare questo metodo per rilasciare risorse condivise, salvare dati utente, invalidare timer e archiviare informazioni sufficienti sullo stato dell'applicazione per ripristinare l'applicazione allo stato corrente nel caso in cui venga terminata in seguito. Dovresti anche disabilitare gli aggiornamenti all'interfaccia utente della tua applicazione ed evitare di utilizzare alcuni tipi di risorse di sistema condivise (come il database dei contatti dell'utente).È inoltre fondamentale evitare di utilizzare OpenGL ES in background.


Per salvare un dizionario invece di un array sostituisci semplicemente tutte le occorrenze di Array con Dictionary


E ripara la perdita

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

rimuovendo la prima riga.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top