[résolu] Technique simple pour conserver un objet
Bonjour.
Lorsque je lance mon application pour la première fois, j'initialise un objet, par exemple un tableau contenant les paramètres de connexion à une base de données distante. Je ne peux pas les mettre en dur dans le code, puisque je ne connais pas ceux que voudra utiliser celui qui lance mon application.
Lorsque je lance mon application ensuite je voudrais récupérer mon tableau de paramètres et ne pas avoir à entrer de nouveau ces paramètres.
Autrement dit comment assurer la permanence des données de mon tableau une fois l'application fermée, afin
de pouvoir utiliser ces données lors d'un nouveau lancement de l'application.
Quelle serait la technique la plus simple ?
J'ai vu Core Data, sqlite. Il y en a certainement d'autres, moins sophistiquées.
Sinon, j'envoie les données sur mon serveur PostgreSQL et je les rapatrie au besoin. Cela je sais le faire facilement. Mais c'est un marteau-pilon pour écraser une noix...
Merci de vos suggestions
Réponses
Regardes la doc de NSUserDefaults
Je confirme, Core Data c'est vraiment trop sophistiqué pour çà . Et NSUserDefaults est fait pour çà en plus.
En plus de la doc, fais une recherche sur le forum, tu as des tas de posts à ce sujet...
Ici et ici entre autres...
Je me suis mal fait comprendre.
Il ne s'agit pas de conserver un objet "MesParms" le temps que l'application "MonApp" est active.
Pour cela NSUserDefaults est parfait.
Mais à chaque nouveau lancement de "MonApp", NSUserDefaults est réinitialisé à nil. Les valeurs
de l'objet "MesParms" sont réinitialisées idem et donc perdues d'un lancement à l'autre.
Je viens d'en faire l'essai.
Premier lancement
Second lancement
J'aurais souhaité voir
Bon je me suis peut-être trompé dans le code ?
Ce que je voudrais.
Premier lancement de "MonApp", la variable d'instance "user" de "MesParms" est égale à @"". Je lui donne une valeur @toto. Je veux conserver un objet "truc" de valeur @toto quelque part, hors de l'application sans doute.
Lors d'un lancement ultérieur de "MonApp", je veux pouvoir récupérer la valeur @toto de l'objet "truc" et l'utiliser via un "setUser:truc" par exemple.
Je voudrais une sorte de NSUserDefaults qui persiste une fois l'application fermée.
Heu non c'est ton code qui est mauvais. NSUserDefaults est justement fait pour persister une fois l'application fermé, il n'est certainement pas réinitialisé à nil.
Et c'est un peu normal le comportement que tu as, vu ton code... vu que dès la 2eme ligne tu effaces la valeur de karray, et ensuite tu t'étonnes que dès la 3ème ligne sa valeur soit effacée...
Pourquoi remettre karray à nil à chaque lancement ? Forcément si tu l'effaces explicitement à chaque fois, bah en effet il sera effacé puisque c'est ce que tu demandes via ta ligne de code!!
Enlève ta 2e ligne de code inutile et c'est précisément le comportement que tu auras.
Non le NSUserDefaults n'est pas réinitialisé a nil a chaque lancement de l'application ( Comme précisé par @AliGator c'est ton code qui n'est pas bon), le NSUserDefaults est réinitialisé seulement si tu supprime l'application et tu la réinstalle. Si tu veux garder la valeur même si l'application est désinstaller, il faut la garder dans le trousseau ( je ne suis pas trop sur ).
Bah, en plus dans les liens que je t'ai donné, si tu les as lus, il y a des bouts de code dedans... Il te suffit de les adapter à ton cas.
Mais c'est bien sûr ! Erreur classique ...
J'avais regardé NSUserDefaults sans en comprendre l'intérêt, la persistance d'un lancement à l'autre.
Mais c'est bien caché dans la doc, du moins je ne l'ai pas vu.
Question bête : si je lance plusieurs fois la même application en même temps, que se passe-t-il ?
Merci à tous.
Donc déjà c'est un cas très rare voire qui n'arrive jamais d'avoir plusieurs instances de ton application de lancée. Sauf sur du multi-session (plusieurs comptes utilisateurs). Mais de toute façon NSUserDefaults est organisé en domaines. D'ailleurs ce concept est expliqué dès la première page du Programming Guide associé, donc je te laisse RTFM puisque tout est expliqué dans ce Programming Guide mieux que je ne saurai le faire moi-même.