Les fichiers Plist sont des conteneurs pour les dictionnaires de données utilisés dans l’iPhone ou l’iPad.
En enregistrant des fichiers Plist sur l’appareil de l’utilisateur, vous pouvez ainsi conserver des données comme une liste de favoris, des préférences utilisateur ou encore des contenus saisis (brouillons, notes).
Le code suivant illustre la création d’un dictionnaire et son enregistrement.
Tout d’abord, il faut créer un dictionnaire qui contiendra les données à enregistrer.
NSMutableDictionary *tempDict = [[NSMutableDictionary alloc] init];
Ajoutez quelques paires clé/valeur.
[tempDict setValue:[NSNumber numberWithInt:123] forKey:@"id"]; [tempDict setValue:@"Maths" forKey:@"title"]; [tempDict setValue:[NSNumber numberWithFloat:12.5] forKey:@"note"];
Pour conserver le fichier entre les différentes sessions d’utilisation de l’application, celui-ci doit être enregistré dans le dossier Documents de l’iPhone. Pour récupérer le chemin vers le fichier UserList.plist (à créer ou écraser) utilisez le code suivant :
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *path = [documentsDirectory stringByAppendingPathComponent:@"UserList.plist"];
Il ne reste plus qu’à écrire le fichier.
(Ici avec le résultat de l’écriture en console)
NSLog(@"Write to %@.\nResult : %i", path, [tempDict writeToFile:path atomically: YES]);
L’argument atomically spécifie si une copie de sauvegarde du fichier existant doit être réalisée avant l’écriture du nouveau fichier.
Pour accéder au contenu du fichier écrit, voir le TIP: Lire un fichier Plist (iPhone/iPad).

Bonjour
est-il possible d’écrire des données dans un fichier plist et quel est le code pour écrire dans un fichier plist ?
Charlotte,
Pour écrire un fichier Plist, il faut se référer à la dernière ligne de code de l’article.
Cordialement,
Benoit
Bonjour et merci pour cet exemple.
Cependant comment faire pour enregistrer plusieurs données à la suite ? Car ici à chaque nouvelle demande d’enregistrement, les anciennes valeurs sont remplacées par les nouvelles. Je voudrais moi qu’elles se mettent à la suite !
Merci d’avance pour la réponse !
Bonjour Shon,
Il suffit de créer un tableau qui sera stocké pour une clé et d’ajouter au fur et a mesure des valeurs dans le tableau.
NSMutableArray *tb = [...]
[tempDict setValue:tb forKey:@"mon_tableau"];
Bonjour,
Je voudrais savoir le code pour supprimer tout le contenu de mon fichier plist.
Pour linstant j’arrive que à vider dans la memoir mais le fichier plist reste inchanger.
Merci d’avance.
Bonjour,
Pour écrire un PLIST vide, il suffit d’écrire un dictionnaire vide.
Initialisez le dictionnaire et écrivez-le.
NSMutableDictionary *tempDict = [[NSMutableDictionary alloc] init];[tempDict writeToFile:path atomically: YES]
Cordialement,
Benoit
Bonjour,
J’ai suivit votre didacticiel pour écrire dans un fichier plist.
Cela fonctionne correctement avec le simulateur 4.3 mais quand je teste sur mon iphone il écrit pas dans le fichier plist.
//UPDATE PREFS.plist for new version of database
NSString *path = [[NSBundle mainBundle] pathForResource:@ »prefs » ofType:@ »plist »];
NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
[dict setValue:version forKey:@"databaseV"];
[dict writeToFile:path atomically: YES];
[dict release];
NSDictionary *dictread = [[NSDictionary alloc] initWithContentsOfFile:path];
NSString *prefversion = [dictread objectForKey:@"databaseV"];
Dans cet exemple que je relis le contenu du fichier plist, il vaut l’ancienne valeur de départ.
Si vous avez une idée?
Bonjour,
Essayez de placer la ligne du writeToFile dans un NSLog. Cela vous indiquera si le fichier est bien écrit.
Autrement, vous faites un setValue puis un objectForKey. Essayez un valueForKey.
Tenez-moi au courant !
Merci pour vos conseils:
Le NSLog m’indique Result: 1 dans le simulateur mais dans mon iphone Result: 0
Donc il semble pas écrire dans iphone et je ne sais pas pourquoi!
Est ce possible que le fichier plist dans mon projet Xcode ne peut être modifié dans l’iphone?
Bonjour Thiébault,
Un détail m’a échappé dans la lecture de votre commentaire.
Il n’est pas possible d’écrire dans le « mainBundle ». C’est pour cela que dans mon exemple j’utilise NSSearchPathForDirectoriesInDomains.
Votre fichier ne pourra donc pas être écrit dans le « mainBundle » même si dans le Simulator cela est autorisé.
En espérant vous avoir aidé,
Benoit
Bonjour Monsieur Deldicque, c’est la solution que j’avais envisager mais je ne sais pas comment avec un NSSearchPathForDirectoriesInDomains accéder au fichier plist que j’ai créé sur la racine de mon projet.
En faite, un NSSearchPathForDirectoriesInDomains pointe dans le dossier Documents de l’iphone. Mais je ne sais pas ou se trouve mon fichier prefs.plist lorsque mon projet est compilé dans mon iphone.
C’est bizarre je trouve bien ma db sqlite dans Documents mais pas mon fichier plist.
Dès le lancement de mon app si je parcours le contenu du dossier Documents, je retrouve bien ma db sqlite sur la racine de mon projet Xcode mais pas mon fichier plist de départ.
Auriez-vous une idée lumineuse?
En tout cas je vous remercie pour votre aide.
Bonjour,
Pour utiliser le fichier PLIST, il faut le copier dans le NSSearchPathForDirectoriesInDomains depuis le ressourcesBundle.
pour cela, utilisez un writetoFile: Ensuite il sera bien accessible et visible dans votre dossier.
Cordialement,
Bonjour,
Donc pour être bien sur d’avoir tout compris si on veut accéder et modifier un fichier plist de préférences dans un projet Xcode, il faut au lancement de l’application le copier de puis le ressourcesBundle avec un NSSearchPathForDirectoriesInDomains? Pour pouvoir le modifier par après.
En tout cas un grand merci pour tout votre aide sur la compréhension de ce problème.
Cordialement,
Bonjour,
C’est bien cela, il faut copier les ressources avant de la utiliser.
Pensez à ajouter le tag sur le fichier pour la sauvegarde (ou pas) sur iCloud. C’est un motif de non validation d’une application désormais.