Core Data, NSOutlineView et NSTreeController

helgrindhelgrind Membre
16:35 modifié dans API AppKit #1
Bonjour,

J'utilise Core Data avec une NSOutlineView et un NSTreeController. J'aimerais que cette NSOutlineView ait l'apparence de celle qui est dans Mail/iTunes, c'est à  dire avec différent groupes.
Quelque chose comme ça:

Bibliothèque
--> Ma bibliothèque
--> Dossier 1
--> Dossier 2
...

Dossiers Intelligents
--> Ajouté récemment
--> Meilleur Classement
...

Le problème est que je ne veut pas enregistrer ces groupes (Bibliothèque et Dossiers intelligents) dans la base de donnée.
J'aimerais les créer au lancement de l'app puis de leurs ajouter leurs sous-groupes respectifs.
J'arrive bien les créer au lancement en utilisant un in-memory store, mais je n'arrive pas à  leurs associer leurs sous-groupes qui sont stocké dans la BDD.

Comment puis-je faire ça?
Merci  o:)

Réponses

  • Philippe49Philippe49 Membre
    16:35 modifié #2
    Il faut mettre en place une arborescence .

    Idée ? : Si l'arborescence a peu de niveaux (2 niveaux par exemple) on peut tenter l'architecture :
    Groupe:NSArray  ---> Sous_groupe:NSArray ---> Objets : NSObject
    et voir si utiliser des NSArrayController ne simplifie pas dans cette situation
  • helgrindhelgrind Membre
    16:35 modifié #3
    dans 1206955989:

    Il faut mettre en place une arborescence .

    Idée ? : Si l'arborescence a peu de niveaux (2 niveaux par exemple) on peut tenter l'architecture :
    Groupe:NSArray  ---> Sous_groupe:NSArray ---> Objets : NSObject
    et voir si utiliser des NSArrayController ne simplifie pas dans cette situation

    On doit pouvoir créer autant de niveaux que l'on veut.

    Bon j'ai partiellement résolu le problème en créant ces groupes au premier lancement et en les stockant dans la BDD.
    Comment puis-je savoir maintenant si ce groupe a déjà  été créé au lancement?
  • Philippe49Philippe49 Membre
    16:35 modifié #4
    dans 1206981301:

    Bon j'ai partiellement résolu le problème en créant ces groupes au premier lancement et en les stockant dans la BDD.

    Je ne comprends pas trop ce que tu appelles BDD ici : un fichier auxiliaire, un document genre XML, une arborescence de fichiers ?
    Si tu regardes l'organisation de iTunes, tu verras qu'il y a une/plusieurs Property List ou fichiers équivalents, pour gérer l'ensemble de la bibliothèque.

    Ces property list sont facilement gérables par les classes Cocoa, notamment pour créer une arborescence de Dictionnaire, Array, et type simples pour les feuilles. 

    dans 1206981301:

    Comment puis-je savoir maintenant si ce groupe a déjà  été créé au lancement?

    Ben, là , je suis un peu à  l'aveugle ... si il est créé dans ton code tu peux toujours mettre un NSLog lors de l'appel ou l'exécution d'une méthode de lecture/création.

  • helgrindhelgrind Membre
    16:35 modifié #5
    dans 1206982127:

    Je ne comprends pas trop ce que tu appelles BDD ici : un fichier auxiliaire, un document genre XML, une arborescence de fichiers ?
    Si tu regardes l'organisation de iTunes, tu verras qu'il y a une/plusieurs Property List ou fichiers équivalents, pour gérer l'ensemble de la bibliothèque.

    Ces property list sont facilement gérables par les classes Cocoa, notamment pour créer une arborescence de Dictionnaire, Array, et type simples pour les feuilles.

    La BDD dont je parle est simplement la base SQL ou les données (les fichiers/dossiers de l'arborescence) sont enregistrées par core data.

    Je viens de résoudre le problème en vérifiant simplement que le premier noeud du NSTreeController correspond au groupe "Bibliothèque", si ce n'est pas le cas il est créé.

    Pour l'instant ça fonctionne  :P
  • Philippe49Philippe49 Membre
    16:35 modifié #6
    dans 1207044903:

    La BDD dont je parle est simplement la base SQL ou les données (les fichiers/dossiers de l'arborescence) sont enregistrées par core data.


    Autant pour moi, cela fait bien longtemps que j'ai mis le nez dans CoreData.
  • Philippe49Philippe49 Membre
    16:35 modifié #7
Connectez-vous ou Inscrivez-vous pour répondre.