Archiver des tableaux & dictionnaires
muqaddar
Administrateur
Salut !
Voilà 2 méthodes qui permettent un archivage et la lecture d'un tableau :
Je souhaiterai savoir maintenant comment archiver des tableaux multiples dans un seul fichier, ou bien encore archiver des dictionnaires, la façon de les concaténer en quelque sorte... merci
Voilà 2 méthodes qui permettent un archivage et la lecture d'un tableau :
-(BOOL)writeToFile:(NSString*)aPath ofType:(NSString*)type {<br /> return [_tab writeToFile:aPath atomically:YES];<br />}<br /><br />-(BOOL)readFromFile:(NSString*)aPath ofType:(NSString*)type {<br /> [_tab autorelease];<br /> _tab = [[NSMutableArray alloc] initWithContentsOfFile:(NSString*)aPath];<br /> return YES;<br />}
Je souhaiterai savoir maintenant comment archiver des tableaux multiples dans un seul fichier, ou bien encore archiver des dictionnaires, la façon de les concaténer en quelque sorte... merci
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Quand à mettre plusieurs tableaux et dictionaires dans un même fichier, y'a rien de plus simple.
Il suffit de mettre tout ton fourbi dans un dictionaire (ou un tableau) racine.
Par exemple tu crées un dictionnaire avec comme contenu: le tableau de mes groupes, le tableau des Sites, la liste de mes courses, le dictionaire du glossaire OC etc ...
(Tu attribus un mot clef de ton cru à chaque élements bien sur)
Et à l'ouverture, tu retrouves dans ton dico racine touts tes chers tableaux et dicos etc... sagement rangés avec leur clef d'accès.
Comme objet racine, un tableau fait aussi l'affaire, mais je ne vois pas ici l'intérrêt d'une collection ordonnée et j'aime bien l'usage des clefs qui est plus explicite que des indices.
Je vais essayer de créer ça. A tout'
J'arrive pas à déclarer mes clés à la volée !
Avant de faire : [dicArchivage setObject: _groups forKey: groupsKey];
Tu peux me metter sur la voie amigo ?
On peut transmettre chose?
Je ne sais pas comment tes données sont structurées, mais si la clé de cause des problème, tu les mets dans un tableau. Et au chargement de ton prog, tu recharges ton tableau dans le même ordre (à supposer que le type d'élément et le nombre ne change pas).
Ah plus maintenant... bizarre. O0
J'ai déjà vu ça dans un tuto. Je trouve ça moche.
ça me fait penser à un programme écrit en C. ::)
il me semble que le début des noms par un souligné marque les variable Privées.
Du reste dans le KVO et leur usage par les bindings, la règle est que si le binding ne trouve pas les accesseurs attendus, il agit directement sur la variable SAUF si elle est marquée comme privée par le underscore.
tempGroups, someGroups, comme dans les accesseurs :
[EDIT]
Si j'ai bien compris, dans l'exemple ci-dessus, aGroup est une variable argument.
peut-être que j'utilise déjà sans le savoir ::)
[edit] et une variable privée ???
Je traduis : underscore = _ (j'ai mis deux min avant de comprendre)
Sory euh pardon désolé ;D
Le underscore _ est là pour dire que c'est un tableau. Enfin, moi je fais comme ça et c'est cool.
C'est vrai.
Mais, il ne faut pas parler de variables privées au sens Objective-C (qui elles sont marquées par la directive @private). Ce sont plutôt des variables "cachées" ou non documentées. Elles restent accessibles aux autres classes (si elles sont @public), mais leur emploi n'est normalement pas permis.
Il en va de même pour les méthodes commençant aussi par _ .
Pour la petite histoire, beaucoup de méthodes dans les classes cocoa commencent par _ . Bien sûr, Apple ne fournit pas de doc dessus : ce sont les fameuses "undocumented" qu'on peut utiliser, mais à ses risques et périls.
.
Des utilitaires comme otool ou class-dump permettent de les trouver...
Par exemple, class-dump permet de trouver ça dans la classe NSWindow :
_minimizeAll est une méthode de classe "undocumented" qui permet de miniaturiser d'un coup toutes les fenêtres d'une appli (en fait cette méthode est liée au menu "Fenêtre", article "Placer dans le dock" tout en appuyant ALT).
Le problème des "undocumented" est que bien sûr Apple peut du jour au lendemin modifier le comportement de la méthode, voire la supprimer sans rien dire...
Toutefois, beaucoup de "undocumented" deviennent "documented" (elles perdent alors le _) au fur et à mesure des versions de OS X.
.
[[openPanel _navView ]setShowsHiddenFiles:YES];
Merci encore à la personne ( l0wc0der ???) qui ma donné l'astuce sur un autre forum
En fait, je ne veux pas concaténer des tableaux dans un dictionnaire, mais des dictionnaires dans un dictionnaire. Seulement mon code d'archivage est dans ma classe controller. Or, je ne vois pas comment jongler avec les dictionnaires qui sont chacun dans leur propre classe, à l'intérieur de ma classe controlleur... Comment mon contrôleur va s'en sortir ?
Me fais-je comprendre ? :P :P
Et différentes classes responsables chacunes de leur dictionnaires c'est ça ?
Ton contrôleur a des pointeurs sur les classes en question ?
Dans ce cas, chaque classe doit aussi implémenter une méthode du genre: - (NSDico*) monDico et - (void)setMonDico: (NSDico*)leDico.
Au moment de l'archivage ton contrôleur demande à chaques classes de renvoyer leur dico, et les range sagement dans un dico racine avec une clef identifiant clairement de quelle classe vient ce dico. Ensuite il sauvegarde le dico avec un writeToFile.
A la lecture c'est l'inverse, il lit le dico racine, et clef par clef il récupère les dicos de tes classes qu'il leur envoie avec la méthode setMonDico de chaque classe.
ça répond à tes interrogation ? :-\
Oui tout à fait, ça pour être pratique c'est pratique, mais le risque est toujours là : lorque Tiger sortira, soit la méthode setShowsHiddenFiles: est officialisée, soit elle reste cachée, soit elle est virée....et j'espère pour toi qu'elle ne sera pas virée :-\
@Oxitan : Désolé d'interférer dans ton thread !