2010-07-15 4 views
2

J'essaie d'enregistrer certains paramètres de mon application dans un fichier plist lorsqu'il se ferme, puis de les charger lorsque l'application est lancée. J'ai 4 numéros enregistrés dans un tableau appelé NSArray. Le chargement fonctionne bien car si je change le fichier, l'application démarre la façon dont le fichier a été modifié.NSArray writeToFile renvoyant "is deprecated" - iPhone SDK

Ce code fonctionne très bien:

- (void)LoadSettings { 
NSString *path = [[NSBundle mainBundle] bundlePath]; 
NSString *finalPath = [path stringByAppendingPathComponent:kSaveFileLocation]; 
NSArray *array = [[NSArray alloc] initWithContentsOfFile:finalPath]; 
clockFaceImageSlider.value = [[array objectAtIndex:0] integerValue]; 
HourTypeSwitch.on = [[array objectAtIndex:1] integerValue]; 
touchRotationSwitch.on = [[array objectAtIndex:2] integerValue]; 
accelerometerRotationSwitch.on = [[array objectAtIndex:3] integerValue]; 
} 

Ce code fonctionne jusqu'à la ligne sauver:

- (void)SaveSettings { 
    NSString *path = [[NSBundle mainBundle] bundlePath]; 
    NSString *finalPath = [path stringByAppendingPathComponent:kSaveFileLocation]; 
    NSArray *array = [[NSArray alloc] initWithObjects:[NSNumber numberWithInt:clockFaceImageSlider.value], [NSNumber numberWithInt:HourTypeSwitch.on], [NSNumber numberWithInt:touchRotationSwitch.on], [NSNumber numberWithInt:accelerometerRotationSwitch.on], nil]; 

    if (![array writeToFile:finalPath atomically:YES]) { 
     NSLog(@"error"); 
    } 
    //The log does print error 
} 

Est-ce que quelqu'un sait comment je peux le faire enregistrer au plist?

~ merci

Répondre

2

Au lieu de prendre la description (qui est un NSString) d'un NSArray et d'écrire dans un fichier, il suffit d'utiliser writeToFile:atomically de se NSArray, comme dans

[array writeToFile:finalPath atomically:YES]; 

La raison writeToFile:atomically: d'un NSString est dépréciée est qu'il ne tient pas correctement compte des codages de caractères. Qui vous a dit d'utiliser description? Cette personne/ce livre devrait être puni ...

Cela dit, si vous voulez enregistrer seulement quelques entrées, il serait plus facile d'utiliser simplement NSUserDefaults, voir here. Ensuite, tout ce que vous avez à faire est

[[NSUserDefaults standardUserDefaults] setObject: ... forKey:@"..."] 

et le cadre fait tout de préparer un chemin plist dans les coulisses pour l'enregistrer sur le disque.

+0

Merci cela a fonctionné. Je n'ai que 4 valeurs à stocker. –

4

Ne pas écrire la description de tableau NSString, il suffit d'écrire le tableau à la place:

[array writeToFile:finalPath atomically:YES]; 

Ou si vous voulez que les chaînes que vous devez utiliser en encodage de type

NSError *error; 
[[array description] writeToFile:finalPath atomically:YES encoding:NSUTF8StringEncodingerror:&error]; 

mais n'écrira pas de plist.

+0

Merci pour une réponse rapide. Je ne reçois plus d'erreur, mais ça ne sauve pas. J'ai modifié mon code pour vérifier s'il est enregistré, et il retourne le message d'erreur. J'ai mis à jour ma question. –

+0

Vous devez écrire vos fichiers dans le répertoire Documents de votre application. C'est le seul endroit où vous avez la permission. NSString * documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent: @ "Documents"]; est le dossier dans lequel vous voulez sauvegarder vos affaires. – nacho4d

+0

Merci cela a fonctionné. –

Questions connexes