2012-07-16 8 views
5

Uso NSUserDefaults en mi configuración. La aplicación funciona bien incluso presiono la tecla de inicio para dejar la aplicación en segundo plano, pero si elimino la aplicación, se perderán los datos guardados en NSUserDefaults. Aquí está mi código. Tengo uso sincronizar. El primer initialize:Datos perdidos perdidos después de la aplicación kill usando NSUserDefaults

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

Leer valor a cabo en un viewController:

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

la pusieron en una acción:

- (IBAction)changeAirPlayStatus:(id)sender 
{ 

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

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

}

Respuesta

1

no veo una razón por eso.

Ha comprobado en el directorio del Simulador, en Biblioteca/Cachés existe la lista que guarda sus NSUserDefaults. Verifique si está escrito correctamente.

Y, por favor, no use setInteger: TRUE. Esto está mal en muchos niveles. Use setBOOL: SÍ en su lugar. O setInteger: 1.

+1

Después de cambiar setInteger a setBOOL, todo va bien. Entonces forza la conversión deja loco a ios. Y la ubicación del archivo plist en:/Users/apple/Library/Application Support/iPhone Simulator/5.1/Applications/xxxx-xxxxx-xxxxx/Library/Preferences/com.yourappname.plist –

1

La mejor manera de asegurarse de que sus datos estén guardados es incluir una llamada al -synchronize en y en applicationWillResignActive: en su delegado de la aplicación.

Editar:

Además, los comentarios de steipete sobre el uso de setInteger: verdaderos son el uso preciso- setBool: SÍ lugar.

Cuestiones relacionadas