Sauvegarde des préférences
apocaalypso
Membre
Bonjour,
Je souhaiterai sauvegarder la valeur d'un UISwitch pour la rétablir lors du prochain lancement de l'application. J'ai rechercher des topics similaires et à l'aide de la doc j'ai pu faire ceci :
Et voici mon code qui affiche les dernières préférences :
Je n'ai pas d'erreur mais mon code ne sauvegarde rien, lorsque je met le UISwitch à ON, que je quitte l'application et que je la re-lance, le UISwitch et à OFF.
J'ai vu qu'il y aurait peut-être une histoire de NSDictionnary.
Comment pourrais-je sauvegarder la valeur de mon UISwitch ?
Merci beaucoup !
Guillaume.
Je souhaiterai sauvegarder la valeur d'un UISwitch pour la rétablir lors du prochain lancement de l'application. J'ai rechercher des topics similaires et à l'aide de la doc j'ai pu faire ceci :
NSUserDefaults* prefs = [NSUserDefaults standardUserDefaults];<br /> <br /> // Did the user choose the Extreme mode ?<br /> if(extreme.state)<br /> {<br /> [prefs setBool:YES forKey:@"extreme"];<br /> }<br /> <br /> else<br /> {<br /> [prefs setBool:NO forKey:@"extreme"];<br /> }<br />
Et voici mon code qui affiche les dernières préférences :
NSUserDefaults* prefs = [NSUserDefaults standardUserDefaults];<br /> <br /> // The user want the Extreme mode<br /> if([prefs boolForKey:@"extreme"])<br /> {<br /> [extreme setOn:YES animated:YES];<br /> }<br /> // He does not want it<br /> else<br /> {<br /> [extreme setOn:NO animated:YES];<br /> }<br />
Je n'ai pas d'erreur mais mon code ne sauvegarde rien, lorsque je met le UISwitch à ON, que je quitte l'application et que je la re-lance, le UISwitch et à OFF.
J'ai vu qu'il y aurait peut-être une histoire de NSDictionnary.
Comment pourrais-je sauvegarder la valeur de mon UISwitch ?
Merci beaucoup !
Guillaume.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
@property(nonatomic, getter=isOn) BOOL on
et non state
Donc essaye extreme.on au lieu de extreme.state
Merci Philippe !
Est il plus facile avec une PList ou alors des entrees dans ma base ?
Le plus simple c'est un PLIST.
Mais si t'as déjà une base... ça vaut p-e le coup de s'en servir... une requête SQL et hop.
Dans l'app delegate (par exemple)
Dans les ressources un fichier PList (add > new file , naviguer et choisir plist.
Puis ensuite, sauver ou lire les préférences quand il le faut
et tout se fait là où il faut ...
Mais si ça te dérange pas qu'il soit vide, t'as mm pas besoin de rajouter ça. Un simple [tt][[NSUserDefaults standardDefaults] setObject:monArray forKey:@ids];[/tt] pour sauvegarder un NSArray* monArray dans les prefs, et un [tt]monArray = [[NSUserDefaults standardDefaults] arrayForKey:@ids][/tt] pour relire les prefs, et basta.
Après niveau performance c'est pareil ou pas ? Sachant que j'ai déjà une BD dans mon app.
merci
L'ajout ne s'effectue pas dans l'appDelegate mais dans un de mes contrôleurs, cela vient il de la ?
voici la méthode qui devrait ajouter. Celle ci est bien appelé au travers d'un bouton et l'objet huh existe bien.
Comment vois-tu que cela ne fonctionne pas ?
Non ce n'est pas un problème
En général, on ne crée de variable d'instance pour le standardUserDefaults, car n'importe où dans ton code tu peux atteindre ce singleton par
NSUserDefaults * standardUserDefaults=[NSUserDefaults standardUserDefaults];
Merci de ta réponse, j'ai compris comment faire je pense mais si j'essaye ton exemple il est censé rajouté dans mon PList une entrée nommé Wallpaper avec un entier dedans, c'est ça ?
Mais quand je regarde dans mon fichier il n'y a rien dedans.
A quel moment regardes-tu dans ton fichier ?
Le standardUserDefaults est une image du plist dans ton code (une classe contenant un dictionnaire sans doute) , et le report ne se fait qu'à la fin de ton programme. Sauf si explicitement tu fais exécuter la méthode synchronize de NSUserDefaults, mais en général, cela n'a pas d'intérêt.
Donc pour voir les transformations, il faut quitter ton application.
Du coup la j'ai testé d'ajouter un entier et si je le rappelle dans un autre endroits de mon appli cela fonctionne bien. Donc normalement si je relance l'appli il devrait me garder cette valeur ?
Merci
En cours d'exécution, ton programme n'écrit pas dans un fichier (sauf demande explicite de ta part) mais écrit dans la mémoire qu'il utilise. Un de tes objets est une instance de la classe NSUserDefaults qui sert à mémoriser les changements des paramètres principaux de ton appli.
Oui à la fin de ton programme, les modifications seront reportées dans un plist se trouvant dans le répertoire "Library" du sand box de ton appli : tu peux le voir dans le répertoire du simulateur : ~/Library/Application Support/iPhone Simulator/User/Applications/ n° de ton application/Library/Preferences/
Reste à ajouter un deuxieme bouton dans ma navigationBar.
JE vais ouvrir un autre topic pour ça.
j'arrive pas à récupérér le tableau précédemment sauvé et lui ajouter de nouvelles valeurs, je fais cela :
Le premier log me retourne 17133408 qui je pense doit etre l'id de l'objet retourné. Comment faire pour avoir sa valeur et non pas son emplacement ???
Merci
Un NSArray ne peut stocker que des objets, pas des types C simples. On lit dans le tableau un NSNumber qui est justement une classe pour pouvoir faire des objets à partir de types simples.
[monMutableArray addObject:[NSNumber numberWithInt:spotID]];
NSNumber * number=[monMutableArray objectAtIndex:0];
int h=[number intValue];
NSLog(@%d, h);
Merci beaucoup pour votre aide.