2009-05-07 17 views
17

Estoy creando una aplicación para iPhone en la que deseo guardar el estado de la Aplicación. Esto incluye una propiedad int que estoy persistiendo en un archivo por sí mismo. Lo tengo escrito y funcionando, pero sé que la forma en que lo hice fue un poco raro, convirtiendo el int en un String y luego NSData. ¿Alguien puede sugerir una mejor manera?iPhone - int a NSData?

int someInt = 1; 
NSString *aString = [NSString stringWithFormat:@"%d",someInt]; 
NSData *someData = [aString dataUsingEncoding:NSUTF8StringEncoding]; 
[someData writeToFile:[documentsDirectory stringByAppendingString:@"someFile"] atomically:YES]; 

Y después de leerlo desde el disco y volver a ponerlo en un int -

NSData* someData = [NSData dataWithContentsOfFile:[documentsDirectory stringByAppendingString:@"someFile"]]; 
NSString *aString = [[NSString alloc] initWithData:someData encoding:NSUTF8StringEncoding]; 
int someInt = [aString intValue]; 
+0

Al menos otra persona básicamente está de acuerdo (http://lists.apple.com/archives/cocoa-dev/2002/Jun/msg01317.html). Aunque comenzaron con NSNumber, que pasa por alto el paso de formato. –

Respuesta

57

a escribir:

int i = 1; 
NSData *data = [NSData dataWithBytes: &i length: sizeof(i)]; 
[data writeToFile: [documentsDirectory stringByAppendingString: @"someFile"] atomically: YES] 

y volver a leer:

NSData *data = [NSData dataWithContentsOfFile: [documentsDirectory stringByAppendingString: @"someFile"]]; 
int i; 
[data getBytes: &i length: sizeof(i)]; 

Sin embargo, realmente deberías estar usando NSUserDefaults para algo g como éste, en cuyo caso se estaría haciendo:

[[NSUserDefaults standardUserDefaults] setInteger: i forKey: @"someKey"] 

a escribir, y

int i = [[NSUserDefaults standardUserDefaults] integerForKey: @"someKey"]; 

de leer.

+0

¿No es NSUserDefaults solo para las preferencias del usuario que se ajustan en la aplicación de preferencias? – bpapa

+0

No; aunque puede, también es seguro (y común) almacenar allí información de comportamiento de la aplicación, incluso si no hay una interfaz de usuario disponible. Safari en OS X usa los valores predeterminados del usuario para guardar elementos como el tamaño de la última ventana, si las características del desarrollador están habilitadas, y así sucesivamente. –