Cet article vous explique comment gérer les préférences d’une application Cocoa. Je considère que vous savez programmer en Objective-C, que vous connaissez un minimum Xcode et Interface Builder.
Identifiez votre application
Il est impératif que votre application ait un identifiant unique, sous forme d’un domaine, comme les packages en Java. Par exemple : org.glimpse-fr.monapplication
.
- Rendez-vous dans Xcode.
- Dans l’arborescence de gauche, ouvrez la section Targets.
- Faites un clic droit sur la cible en question (c’est le nom de votre programme) puis choisissez Get Info.
- Une fenêtre s’ouvre. Dans l’onglet Properties, saisissez un identifiant unique dans le champ Identifier (par exemple :
org.glimpse-fr.timetracker
).
- Fermez la fenêtre. Lors de la prochaine compilation, votre application aura son propre identifiant unique.
Créez la fenêtre des préférences
Dans Interface Builder, ajoutez une nouvelle fenêtre à votre application et ajoutez-y les champs nécessaires à la gestion de vos préférences : champs textes, cases à cocher, …
Dans le premier onglet de l’inspecteur de propriétés, dans la section Window puis Behavior, assurez-vous :
- de décocher Release When Closed et Visible At Launch
- de cocher Hide On Deactivate
comme ceci :
Connectez la fenêtre au menu Préférences
- Ouvrez le MainMenu depuis la fenêtre qui contient les objets de votre application.
- Ouvrez le menu NewApplication afin de rendre visible l’élément Preferences.
- Faites un clic droit sur cet élément puis, tout en maintenant le bouton droit de votre souris enfoncé, glissez le curseur sur l’icône de votre fenêtre de Préférences : une ligne bleue apparaît.
- Relâchez alors le bouton droit de la souris : une fenêtre apparaît.
- Choisissez l’action
makeKeyAndOrderFront:
Voilà, l’entrée de menu Préférences de votre application ouvrira votre fenêtre de préférences !
Stockage des valeurs préférées
Vous n’avez pas à vous soucier du stockage des valeurs préférées, c’est Mac OS X qui s’en charge grâce aux user defaults. Mais il faut tout de même dire à Mac OS X que les champs de votre fenêtre de préférences doivent être stockées et gérés automatiquement. Pour cela, vous allez devoir suivre les instructions suivantes pour chacun des champs qui représente une valeur de vos préférences :
- Sélectionnez le champ.
- Dans l’inspecteur de propriétés, affichez la section Bindings (l’icône représente un carré et un rond verts).
- Dans la section Value, ouvrez (si ce n’est déjà fait) l’élément Value à l’aide du petit triangle gris.
- Cochez la case Bind to puis sélectionnez Shared User Defaults Controller dans la liste déroulante.
- Saisissez ensuite une valeur dans le champ Model Key Path et ne touchez pas au champ Controller Key (laissez la valeur par défaut : values).
Comme je l’ai dit plus haut, répétez cette opération pour chacun de vos champs de préférences. Si un champ stocke des données non scalaires, comme une couleur (NSColor) ou une date (NSDate), vous devez sélectionner la valeur NSUnarchiveFromData
dans le champ Value Transformer. Le champ Value Transformer indique un nom de classe utilisée pour transformer la valeur du champ avant qu’elle soit utilisée (plus de détails ici). Pour toutes les valeurs scalaires (texte, booléen, nombre, …) il est inutile de spécifier quoi que ce soit, sauf si vous en avez besoin…
Voilà, Mac OS X stockera vos valeurs de préférences et maintiendra à jour votre fenêtre de préférences automatiquement !
Compilez puis lancez votre application. Ouvrez la fenêtre des préférences via le menu habituel et sélectionnez des valeurs. Quittez (proprement) votre application. Relancez votre application et retournez dans la fenêtre des préférences… Eh oui, vos préférences sont bien enregistrées et vous n’avez rien codé !
Pour les plus curieux d’entre vous (et les amoureux de la ligne de commande), ouvrez un Terminal puis lancez la commande suivante, en remplaçant org.glimpse-fr.timetracker
par l’identifiant unique de votre application :
defaults read org.glimpse-fr.timetracker
Vous devriez voir les valeurs de vos préférences.
Utilisez les préférences depuis le code
C’est très simple.
ebbc9ab0035ed92CD9871c1371f9e832000