[Résolu] Créer, modifier, stocker une NSArray de NSString dans les préférences
Bonjour,
Je tâtonne depuis des heures et vais d'erreurs et erreurs en essayant de réaliser la chose suivante:
Dans les préférences de l'application, j'aimerais stocker une série de chaà®nes, en laissant à l'utilisateur la possibilité d'en créer, d'en supprimer et de changer leur contenu. Bref, me retrouver au final avec un contenu de plist du genre:
...
NSArray
NSString
NSString
NSString
Comment faire pour gérer cette table via un contrôleur?
1. Dériver le SharedUserDefaultsController... pas envie de fricoter avec ça
2. Créer un NSArrayController, quitte à le dériver, pour gérer le userDefaults.values.theArray
3. Passer par tout autre chose et stocker l'array dans les userDefaults à la fin de l'application
Ou autre chose? D'avance merci si vous avez des idées à suggérer.
Réponses
Bon, je crée et détruis des NSDictionaries à volonté dans mon fichier de préférence, mais pas moyen de modifier le titre. Je n'ai aucune erreur à l'exécution, mais aucun résultat non plus. J'ai fait comme indiqué ci-dessous, mais j'ai manqué une marche, visiblement. Laquelle?
Bon... Le KVO ne fonctionne pas entre les clés/valeurs des NSDictionaries gérés par le "ColumnController" et le NSArray des UserDefaults. Il me faut donc faire, dans la méthode add: de ce contrôleur:
[[NSUserDefaults standardUserDefaults]setValue:self.arrangedObjects forKey:@columns];
Tu peux le faire simplement en plusieurs étapes :
Récupération du tableau :
self.tableau = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@monTableau]];
[[NSUserDefaults standardUserDefaults] setObject:self.tableau forKey:@"monTableau"];
Voila
Hello horus59153,
C'est ce que j'ai fini par faire, sauf que c'est un peu plus complexe, il s'agit d'une NSArray de NSDictionaries, je suis donc obligé de rendre tout ça mutable pour le modifier, mais à la fin c'est tout bon.
Comme j'ai besoin d'actualiser les préférences (communes) et pas les données de mon contrôleur (appelons-les privées) j'ai rendu ce dernier hypersensible aux changements (des Validate Immediately dans chaque champ, des addObserver tout azimut) et je réécris les préférences à chaque fois que quelque chose bouge. Comme une telle opération est quasi instantanée, le reste de l'application reste très réactive. Et si l'utilisateur décide de forcer à quitter ou arrache le prise (on ne sait jamais) il ne perd pas grand-chose...
C'est marrant d'ailleurs, j'ai remarqué un truc sur les keypaths des UserDefaiults, des fois il faut préfixer "values." et des fois non. J'ai donc dû recourir à des NSLog pour voir ce que le centre de notifications m'envoyait.
Personne n'a dit que la vie était un jardin de roses.