Les préférences

Pratiquement toutes les applications ont un panneau préférences. Ce panneau permet de régler divers paramétres du programme qui seront stockés dans une petite base de donnés. Voici le panneau préférence du programme Edit :

Ceci est aussi vrai pour le système NeXTSTEP qui lui utilise une application spécifique, Preferences, dont voici un panneau :

Les "defaults"

NeXTSTEP étant un système multi-utilisateurs, il existe une base de données de toutes les préférences par utilisateur. Cette base se trouve dans le fichier ~/NeXT/.NeXTdefaults.L. Cette base de données est codée en binaire et n'est donc pas accessible directement. Un petit bundle permet pourtant d'accéder à toutes les valeurs des préférences qui sont appelées les "defaults" :

Il est aussi possible d'accéder aux "defaults" par les commandes unix dread, dwrite et dremove. Les préférences de Edit sont ainsi affichées sous Terminal :

On retrouve les "defaults" accessible par le menu préférences de l'application, mais aussi des valeurs comme les positions de fenêtres.

Programmation

Tous ces "defaults" sont facilement accessibles par quelques fonctions Objective-C. Il est d'usage de ranger les "defaults" d'une application en utilisation son nom comme référence. Le code suivant sauvegarde une valeur flottante avec le nom "Delai" :

	char buf[10];
	(void)sprintf(buf, "%4.1f", valeur);
	NXWriteDefault([NXApp appName], "Delai", buf);

Le code suivant relit la valeur sauvegardée :

	float valeur = atof(NXGetDefaultValue([NXApp appName], "Delai"));

Les applications lisent leurs "defaults" au moment du démarrage. Ceci est généralement fait dans la méthode appDidInit :

- appDidInit:sender
{
	NXDefaultsVector defs = {
		{ "Delai",   "12.4" },
		{ "Nom",     "toto"  },
		{ NULL,      NULL }
	};
	// ...
	NXRegisterDefaults([NXApp appName], defs);
	Delai = atof(NXGetDefaultValue([NXApp appName], "Delai"));
	Nom = NXGetDefaultValue([NXApp appName], "Nom");
}

En réalité, il faut tester les codes de retour, mais le principe est là.