Lire et enregistrer un fichier plist

lundi 19 mars 2012

Quand on créé un fichier .plist dans son projet xcode pour enregistrer des préférences par exemple. Il est très important de le copier dans le dossier « Documents » de l’appareil pour pouvoir le modifier par après. (par exemple changer les préférences).
Au lancement de l’application, il faut le copier depuis le ressourcesBundle avec un NSSearchPathForDirectoriesInDomains.
Une fois copié on a accès au fichier plist et on peut le modifier.

    //SAVE PLIST PREFERENCE FILE 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"prefs" ofType:@"plist"];
    NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *newpath = [documentsDirectory stringByAppendingPathComponent:@"prefs.plist"];
    BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:newpath];
    if(!fileExists){
       [dict writeToFile:newpath atomically: YES];
    }

Ici on lit le fichier préférence du projet et on le sauve dans le Dossier Documents de l’iphone pour pouvoir le modifier par après. (A mettre dans le lancement de l’application). Bien sûr on copie le fichier préférence 1 seul fois lors du lancement de l’application sinon on le détruit à chaque lancement de l’application. D’ou le test de fileExists.

     NSString *path = [documentsPath stringByAppendingPathComponent:@"prefs.plist"];
     NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
     [dict setValue:version forKey:@"databaseV"];
     [dict writeToFile:path atomically: YES];

Ici on récupère le fichier plist et on modifie son contenu

    NSArray *tpaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *tdocumentsDirectory = [tpaths objectAtIndex:0];
    NSString *tpath = [tdocumentsDirectory stringByAppendingPathComponent:@"prefs.plist"];
    NSDictionary *dictread = [[NSDictionary alloc] initWithContentsOfFile:tpath];
    NSString *prefversion = [dictread objectForKey:@"databaseV"];
    int versionIphone = [prefversion intValue];

Ici le code pour lire le contenu du fichier plist modifié.

Voici un exemple concret et complet pour l’utilisation de fichier plist. Les fichiers plist sont des formats d’Apple basé sur l’XML et utiliser pour sauvegarder des données d’Objective-C. Idéale pour le transfert de données dans l’application. Très utile car il est associé directement à un dictionnaire et donc pas besoin de le parser par exemple comme de l’XML.
Astuce: il est possible de voir le contenu (fichiers) généré dans un iphone pour s’assurer que le ou les fichier(s) sont présents. Pour se faire, on vide la corbeille de notre Mac ensuite on « Réinitialise le contenu du simulateur » et ensuite on retourne dans la corbeille qui contiendra maintenant un dossier représentant le contenu de l’iphone et on peut rechercher dans l’arborescence si le chemin du fichier qu’on souhaite atteindre est correcte.

Tags: Développement , IOS , Objective C , Xcode