2012-07-16 7 views
5

Uso le impostazioni NSUserDefaults nelle mie impostazioni. L'app funziona bene anche se premo il tasto home e lo faccio in background, ma se uccido l'app, i dati salvati in NSUserDefaults andranno persi. Ecco il mio codice. Ho usato sincronizzare. La prima inizializzazione:Dati persi dopo l'uccisione dell'app utilizzando NSUserDefaults

if (![userDefaults integerForKey: 
      kORFootageAirPlayModeKey]) 
    { 
     [userDefaults setInteger:TRUE forKey:kORFootageAirPlayModeKey]; 
    } 
    [userDefaults synchronize]; 

Leggi valore in un viewController:

airPlayMode = [[NSUserDefaults standardUserDefaults]integerForKey:kORFootageAirPlayModeKey]; 

Situato in un'azione:

- (IBAction)changeAirPlayStatus:(id)sender 
{ 

    if (sender) 
    { 
     airPlayMode = [sender tag]; 

     [[NSUserDefaults standardUserDefaults] setInteger:airPlayMode forKey:kORFootageAirPlayModeKey]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
    } 
..... 

}

risposta

1

non vedo un ragione per quello.

Avete controllato nella directory del simulatore, in Libreria/Cache c'è il plist che salva NSUserDefaults. Controlla se è stato scritto correttamente.

E per favore, non utilizzare setInteger: TRUE. Questo è sbagliato sotto molti aspetti. Usa setBOOL: SÌ invece. Oppure setInteger: 1.

+1

Dopo aver modificato setInteger per impostareBOOL, tutto diventa corretto. Quindi la conversione forzata fa impazzire ios. E la posizione del file plist sotto:/Users/apple/Library/Application Support/iPhone Simulator/5.1/Applications/xxxx-xxxxx-xxxxx/Library/Preferences/com.yourappname.plist –

1

Il modo migliore per garantire che i dati vengano salvati include una chiamata a -synchronize in applicationWillTerminate: e in applicationWillResignActive: nel delegato dell'applicazione.

Edit:

Inoltre, i commenti di steipete sull'utilizzo setInteger: TRUE sono uso accurate- setBool: SI, invece.

Problemi correlati