création d'un menu d'application sans IB

bofybofy Membre
12:36 modifié dans API AppKit #1
Bonjour

Toujours dans ma ligne de me passer de IB sous Cocoa avec Xcode, j'ai réussi à  créer le menu de mon application à  partir d'un fichier .plist (de structure stricte et, sans doute, peu robuste...) en passant par :
- création d'un document XML à  partir du fichier .plist
- traverser le document  XML et générer un tableau
- utiliser le tableau pour construire et afficher le menu de l'application

Ca marche et ça me permet de générer le menu en modifiant uniquement le .plist, mais ça me paraà®t une usine à  gaz. Quelqu'un aurait-t-il une idée d'une simplicité géniale ?

Me contacter et j'enverrai les sources.

Réponses

  • NoNo Membre
    12:36 modifié #2
    dans 1213799521:

    Ca marche et ça me permet de générer le menu en modifiant uniquement le .plist, mais ça me paraà®t une usine à  gaz. Quelqu'un aurait-t-il une idée d'une simplicité géniale ?

    Lire directement le .plist, non ?
    Car il y a tout ce qu'il faut (voir classe NSDictionary) pour charger un plist dans un dictionnaire et ensuite le parcourir pour en extraire les données à  mettre dans le menu.
  • bofybofy Membre
    12:36 modifié #3
    J'ai pensé au dictionary.

    Mais un menu est une arborescence, or il me semble qu'un dictionary est une liste. Bien sûr on peut faire des dictionary de dictionary... Je me trompe ?
    Comme il s'agit toujours de traverser un arbre, l'arbre menu, où est le gain apporté par dictionary, par rapport au document XML ?

    Mon vrai problème est plutôt de trouver une structure de fichier de données en format texte qui puisse décrire l'arbre menu. Les fichiers XML semblent adaptés, et en plus recommandés par Apple... C'est tout un programme ! Mais il peut y avoir d'autres solutions ?
  • AliGatorAliGator Membre, Modérateur
    12:36 modifié #4
    Un fichier plist, du moins quand il est enregistré au format texte et non au format binaire, n'est qu'un fichier XML, avec des tags bien spécifiques...
    &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;<br />&lt;!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;<br />&lt;plist version=&quot;1.0&quot;&gt;<br />&lt;array&gt;<br />	&lt;dict&gt;<br />		&lt;key&gt;Title&lt;/key&gt;&lt;string&gt;Menu Fichier&lt;/string&gt;<br />		&lt;key&gt;Content&lt;/key&gt;<br />		&lt;array&gt;<br />			&lt;string&gt;Nouveau&lt;/string&gt;<br />			&lt;string&gt;Ouvrir&lt;/string&gt;<br />			&lt;string&gt;Fermer&lt;/string&gt;<br />		&lt;/array&gt;<br />	&lt;/dict&gt;<br />	&lt;dict&gt;<br />		&lt;key&gt;Title&lt;/key&gt;&lt;string&gt;Menu Edition&lt;/string&gt;<br />		&lt;key&gt;Content&lt;/key&gt;<br />		&lt;array&gt;<br />			&lt;string&gt;Couper&lt;/string&gt;<br />			&lt;string&gt;Copier&lt;/string&gt;<br />			&lt;string&gt;Coller&lt;/string&gt;<br />		&lt;/array&gt;<br />	&lt;/dict&gt;<br />&lt;/array&gt;<br />&lt;/plist&gt;
    
    Et ce XML tu peux le lire et le stocker directement dans un NSArray par code (readFromFile:) et comme ça tu peux le parcourir avec les méthodes de NSArray directement, boucler sur chaque élément, etc.

    Ceci dit si tu tiens à  utiliser les XMLTree et ton format perso de XML, pourquoi dans la méthode que tu utilises tu le fais en 2 temps ? parcours du XML pour mettre dans un tableau pour reparcourir le tableau pour créer tes menus... pourquoi ne pas créer les menus directement lors du parcours du XML ?
  • bofybofy Membre
    12:36 modifié #5
    dans 1214141867:

    Un fichier plist, du moins quand il est enregistré au format texte et non au format binaire, n'est qu'un fichier XML, avec des tags bien spécifiques...
    Et ce XML tu peux le lire et le stocker directement dans un NSArray par code (readFromFile:) et comme ça tu peux le parcourir avec les méthodes de NSArray directement, boucler sur chaque élément, etc.

    Ceci dit si tu tiens à  utiliser les XMLTree et ton format perso de XML, pourquoi dans la méthode que tu utilises tu le fais en 2 temps ? parcours du XML pour mettre dans un tableau pour reparcourir le tableau pour créer tes menus... pourquoi ne pas créer les menus directement lors du parcours du XML ?


    Bon en gros c'est ce que je fais, et il apparaà®t qu'il n'y a pas de solution miracle ?
    (ce qui n'est guère surprenant...)
    Je vais essayer le truc du .plist direct dans un array, mais il me semblait plus cohérent de passer par les NSXML, dans la mesure où un .plist est du XML. Mais bon !

    Bien sûr, mais je préfère toujours décomposer les choses lors de la mise au point
  • bofybofy Membre
    12:36 modifié #6
    Merci à  tous

    J'ai encore du pain sur la planche avec mes menus...
Connectez-vous ou Inscrivez-vous pour répondre.