NSUserDefaults vers fichier externe

Bonjour à  toutes et tous,


 


Je développe une petite appli contenant 120 boutons que différentes personnes utiliseront sur le même iPhone.


Chacun de ces boutons comporte un label que l'utilisateur peux modifier, cette modification du nom est stockée dans un NSUserDefaults



NSUserDefaults *saveNom = [NSUserDefaults standardUserDefaults];

self->nomBtn01.text = [saveNom objectForKey:@infoString];
[bouton01 setTitle:self->nomBtn01.text forState:UIControlStateNormal];

self->nomBtn02.text = [saveNom objectForKey:@infoString2];
[bouton02 setTitle:self->nomBtn02.text forState:UIControlStateNormal];

self->nomBtn03.text = [saveNom objectForKey:@infoString3];
[bouton03 setTitle:self->nomBtn03.text forState:UIControlStateNormal];

je voudrai que l'utilisateur puisse sauvegarder ces labels de boutons dans un fichier et qu'il puisse loader ce fichier à  sa guise. Cela permettrai d'avoir différents profiles utilisateurs dans chacun des fichiers.


Ainsi l'utilisateur n°1 chargerai son fichier et retrouverai ses propres labels...idem pour l'utilisateur N°2, N°3.....


 


 


auriez vous une suggestion (la plus simple possible ) à  me faire?


je précise que je suis un grand novice en objective-c et que si vos explications pouvaient être accompagnées de quelques brides de code pour les illustrer cela serra grandement apprécié


 


d'avance merci


Réponses

  • CéroceCéroce Membre, Modérateur
    juillet 2016 modifié #2
    On peut enregistrer un dictionnaire dans NSUserDefaults, alors il suffit d'avoir un dictionnaire "racine" dont les clés sont les noms des utilisateurs, et les valeurs sont d'autres dictionnaire.

    Mais franchement... pourquoi utiliser NSUserDefaults pour ça ? C'est pas particulèrement facile à  déboguer ou faire évoluer.
    Je te conseille plutôt d'enregistrer un fichier JSON ou PList dans la sandbox de ton appli.

    P.S.: les gens partagent vraiment leur iPhone ?
  • jeffadsljeffadsl Membre
    juillet 2016 modifié #3

    Salut oui ils s'agit de commerciaux qui se partagent l'iPhone de la boà®te pour faire des démos

     


  • Quelques petites vidéos en français sur l'utilisation des mécanismes de persistance des données (les fichiers) avec iOS :


     


    http://pagesperso.lip6.fr/Fabrice.Kordon/5I452-2014/semaine-10.php

  • re...


     


    j'ai bien avancé grace à  vous


    si cela peut aider quelqu'un voici mon code pour écrire des labels dans un dictionnaire, puis écrire le dictionnaire dans un fichier.txt et la démarche inverse pour retrouver les labels



    -(IBAction)ecrire:(id)sender {


    NSDictionary *dict = @{
    @text1 : _text1.text,
    @text2 : _text2.text,};
    NSLog(@ici : %@",[dict valueForKey:@text1]);


    NSString *dictPath;
    // retrouver le repertoire du dossier document
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
    NSUserDomainMask, YES);

    if ([paths count] > 0)
    {

    // fichier ou est sauve le dictionaire
    dictPath = [[paths objectAtIndex:0]
    stringByAppendingPathComponent:@prefUtilisateur1.txt];


    // ecriture du ddictionaire dans le fichier prefUtilisateur1.txt
    [dict writeToFile:dictPath atomically:YES];
    }
    }


    -(IBAction)lire:(id)sender {

    NSString *dictPath;
    // retrouver le repertoire du dossier document
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
    NSUserDomainMask, YES);

    if ([paths count] > 0)
    {
    // fichier ou est sauve le dictionaire
    dictPath = [[paths objectAtIndex:0]
    stringByAppendingPathComponent:@prefUtilisateur1.txt];

    _dict = [NSDictionary dictionaryWithContentsOfFile:dictPath];

    self.label1.text = [_dict valueForKey:@text1];
    NSLog(@yo : %@",[_dict valueForKey:@text1]);
    }
    }

    maintenant j'ai besoin pouvoir choisir le nom du fichier.txt avant de l'écrire ( exemple : prefUtilisateur2.txt ) puis de lister le contenu du répertoire "documents" de mon appli et de pouvoir le sélectionner avant lecture parmi les autres fichiers.txt


     


    auriez-vous une suggestion quand à  la manière de procéder?


  • LarmeLarme Membre
    juillet 2016 modifié #6
    Il y a plusieurs possibilités.
    Soit tu gardes un seul gros dictionnaire :
    @{User1: prefUser1,
      User2: prefUser2,
      etc.}
    Avec prefUser1 toutes les préférences de User1.
    Et tu peux récupérer tous tes utilisateurs via [dictionnaire allKeys]
     
    Soit tu peux tout diviser :
    @{User1: cheminVersPrefUser1,
      User2: cheminVersPrefUser2,
      etc.}

    Par contre, j'utiliserais .plist pour l'extension de ton fichier, pas .txt.

    La deuxième solution t'évites de charger un trop gros dictionnaire en mémoire, même si je ne pense pas que cela soit vraiment trop important vu les devices relativement puissants qu'on a, mais ça reste une certaine forme d'optimisation.
Connectez-vous ou Inscrivez-vous pour répondre.