[ Résolu ] Mise en oeuvre d'un NSarray
prepa75
Membre
Bonjour à tous
entre 2 exos de maths j'ai penser à un truc : pouvoir enregistrer les records de mon jeu dans un fichier de manière à ce que lorsqu'on le lance à nouveau le score max reste affiché.
En fouinant sur le forum ainsi que sur la doc apple , je me remet à vous parsque je n'arrive vraiment pas à utiliser NSarray.
voici mon code :
en gros voila ce que je voudrai faire : mettre le scoremax dans un tableau et le mettre dans un fichier.je sais ça marche pas car "writetofile" est uniquement fait pour un NSarray (si j'ai bien compris la doc :P ) mais mon problème est que je n'arrive pas à mettre des chiffres dans un NSarray , dans le livre de Hillegass il utilise que des NSString
merci par avance
entre 2 exos de maths j'ai penser à un truc : pouvoir enregistrer les records de mon jeu dans un fichier de manière à ce que lorsqu'on le lance à nouveau le score max reste affiché.
En fouinant sur le forum ainsi que sur la doc apple , je me remet à vous parsque je n'arrive vraiment pas à utiliser NSarray.
voici mon code :
<br /> if(score > scoremax) <br /> {<br /> [best setDoubleValue:score];<br /> scoremax = score;<br /> <br /> char record[1];<br /> record[0] = scoremax ;<br /> printf("record : %d\n\n",record[0]);<br /> <br /> [record[0] writeToFile:@"/test.log" atomically:YES];<br />
en gros voila ce que je voudrai faire : mettre le scoremax dans un tableau et le mettre dans un fichier.je sais ça marche pas car "writetofile" est uniquement fait pour un NSarray (si j'ai bien compris la doc :P ) mais mon problème est que je n'arrive pas à mettre des chiffres dans un NSarray , dans le livre de Hillegass il utilise que des NSString
merci par avance
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
voici mon code :
le score max ne veut pas rentrer dans le tableau modifiable via addObject et je sais pas ou est le problème c'est possible de mettre un nombre dans un tableau non??
Tu fais vraiment n'importe quoi ::)
Typiquement pour retrouver des données entre chaque lancement, on utilise User Defaults
Et là tu essayes de mettre un int (ou un float ou un double ou un short, je sais pas :P), qui n'est pas du tout un objet.
Mais bien sûr, la solution existe : il existe la classe NSNumber, qui est faite pour ça justement : elle permet d'encapsuler à peu près tous les types primitifs représentant des nombres (int, long, float, double, BOOL, ...), ce qui te permet après de les manipuler en tant qu'objets, donc entre autres de les mettre dans un NSArray, ou dans un NSDictionary, ou tout plein d'autres choses.
Ceci dit en passant, c'est sortir le bazooka pour tuer la mouche que d'utiliser un NSArray pour stocker une seule valeur (ton score max), et pour l'écrire dans un fichier.
Pour des petites quantités de valeurs à mémoriser comme ça Utilise NSUserDefaults, qui permet de gérer tout ce qui est préférences et choses du genre pour les stocker de façon pérenne et les récupérer super simplement.
User Defaults Programming Guide
dc si j'ai bien compris : NSNumber permet de transformer un nombre( int, double, float, etc...) en un objet.a partir de la on peut le stocker dans NSArray qui reçoit que des objets.je vais potasser la doc des valeurs par defauts
Bonne soirée à tous.
merci bien , je vais le potasser , parsque là la doc apple m'a un peu largué...
quelqu'un à une idée de pourquoi ça ne marche pas ??
Les méthodes sont bien appelées ?
Tu peux vérifier le contenu du fichier préférences avec PlistEditor.
mais les méthodes - applicationDidFinishLaunching: et applicationWillTerminate: ne marchent pas...(ou du moins je n'arrive pas à les utiliser :P)
du coup j'ai du mettre le code dans un IBAction
quelqu'un a une idée pourquoi mon code du message précédent ne marche pas ?
les méthodes sont en effet bien appelées , tu peut me détailler en quelques lignes l'utilisation de PlistEditor s'il te plait ? :P
Ca se fixe dans IB, il faut tirer un lien entre NSApplication et ta classe et choisir delegate.
Dans le dossier Preferences, tu fais un double-clic sur ton fichier :P
Bien sur que OUI...non
merci Ali et mpergand ça marche nikel...
comment pourrais-je faire pour enrayer ce problème ?
Pour masquer le score, on va le transformer en data:
Genre encapsuler ça dans un NSData (qui fait partie des types que tu peux stocker dans les NSDefaults, mais qui sont bien moins intelligibles à lire qu'un simple entier). " [EDIT] Bon grillé par mpergand sur le coup, et c'est vrai qu'utiliser NSArchiver pour ça c'est plus sympa d'ailleurs au passage que ce que j'ai mis dans mon exemple plus bas[/EDIT]
Comme ça si un petit malin essaye de modifier l'une ou l'autre des valeurs, comme bien sûr tu garderas secret la formule de ton petit calcul, il ne saura pas quelle valeur mettre, et s'il met un truc au hasard pour essayer de bidouiller le fichier, tu le détecteras tout de suite.
Exemple :
Et pour relire : Bon évidemment ce ne sont que des exemples, mais tu vois l'idée.
En plus dans mon exemple comme tu peux le voir je met les deux nombres dans le même NSData (l'un à la suite de l'autre, le premier unsigned long dans les 4 premiers octets du NSData, le 2e dans les 4 octets suivants), ce qui brouille encore plus les pistes, le tricheur risquant encore moins de comprendre que cette valeur dans les prefs est en fait une concaténation de deux valeurs...
héhé jvais lui mettre un ptit message fort sympathique s'il bidouille les scores :P
Bonne soirée