2009-05-07 5 views
17

Je fais une application iPhone où je veux enregistrer l'état de l'application. Cela inclut une propriété int que je persiste dans un fichier seul. Je l'ai écrit et travaillé, mais je sais que la façon dont je l'ai fait était un peu hacky, en convertissant l'int en une chaîne puis NSData. Quelqu'un peut-il suggérer un meilleur moyen?iPhone - int à NSData?

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

Et puis le lire à partir du disque et de le remettre dans un int -

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

Au moins une autre personne est essentiellement d'accord (http://lists.apple.com/archives/cocoa-dev/2002/Jun/msg01317.html). Bien qu'ils ont commencé avec NSNumber, qui contourne l'étape de formatage. –

Répondre

57

Pour écrire:

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

et relues:

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

Cependant, vous devriez vraiment utiliser NSUserDefaults pour quelque chose g comme celui-ci, auquel cas vous seriez en train de faire:

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

à écrire, et

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

à lire.

+0

NSUserDefaults n'est-il pas réservé aux préférences utilisateur qui sont ajustées dans l'application préférences? – bpapa

+0

Non; Bien que vous le puissiez, il est également possible (et commun) d'y stocker des informations sur le comportement des applications, même si aucune interface utilisateur n'est disponible. Safari sous OS X utilise les paramètres par défaut de l'utilisateur pour enregistrer des éléments tels que la taille de la dernière fenêtre, si les fonctionnalités du développeur sont activées, etc. –