Utlisation des userDefaults
macvelotte
Membre
Je mets en mémoire une chaine de caractères :
Dans "awakeFromNib", je rappelle cette châine :
Problème : si le fichier Préférences n'existe pas, il y a plantage au démarrage ...
Comment éviter le plantage ?
[[NSUserDefaults standardUserDefaults] setObject:villeMemo forKey:@"maVille"];
Dans "awakeFromNib", je rappelle cette châine :
maville=[[NSUserDefaults standardUserDefaults] stringForKey:@"maVille"];<br />
Problème : si le fichier Préférences n'existe pas, il y a plantage au démarrage ...
Comment éviter le plantage ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
A mettre dans ta classe principale.
+ (void)initialize se lance au chargement de la classe.
- (void)awakeFromNib se lance au chargement de MainMenuNib.
Le MainMenuNib se charge tout seul au lancement de l'application et la classe principale se charge avant le MainMenuNib.
Mon problème est que je vais chercher une chaà®ne e caractères dans un fichier qui n'existe pas encore (ce qui va se passer au premier lancement de mon app.: le fichier est créé par l'application !)
1 - Si le fichier préférences n'existe pas, il choisit les valeurs par défauts.
2 - Si une valeur change et que le fichier préférence n'existe pas, l'application le créait avec comme seule information, celle qui est différente de la valeur par défaut.
3 - Quand tu quittes l'application le fichier préférences est écrit sur le disque durs.
4 - Lors d'une utilisation ultérieur de l'application, le programme recherche déjà dans le fichier préférence et s'il y ne la trouve pas prend celle par défaut.
Résumé : seule les valeurs modifient par rapport aux valeurs par défaut sont écrites dans le fichier préférence. Tu n'as pas besoin de savoir si le fichier existe ou pas. C'est la classe NSUserDefaultsController qui fait le travaille.
Oui et non.
awakeFromNib est seulement appelé dans une classe qui est instanciée dans un fichier nib. awakeFromNib est appelé quand tous les outlets sont reliés, donc après init.
[tt]
if ([[NSUserDefaults standardUserDefaults] stringForKey:@maVille]==nil)
{
maVille=@Valeur par défaut;
}
[/tt]
Surtout, si tu utilises les variables dans plusieurs classes.