Sauvegarde dans les Preferences (bis)
macvelotte
Membre
Je garde en mémoire des données (il s'agit d'une extension de la calculette trouvée dans "build Cocoa") ,la mise en mémoire étant :
[[NSUserDefaults standardUserDefaults] setObject:memoires forKey:@Memoires];
Je rappelle par :
NSMutableArray *mem;
mem=[[NSUserDefaults standardUserDefaults] arrayForKey:@Memoires];
message du compilateur : "assignment from incompatible pointer type"
Bon, ça marche, mais c'est instable ...
D'où vient l'incompatibilité ?
[[NSUserDefaults standardUserDefaults] setObject:memoires forKey:@Memoires];
Je rappelle par :
NSMutableArray *mem;
mem=[[NSUserDefaults standardUserDefaults] arrayForKey:@Memoires];
message du compilateur : "assignment from incompatible pointer type"
Bon, ça marche, mais c'est instable ...
D'où vient l'incompatibilité ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
on voit que arrayForKey renvoie un NSArray, et tu l'affectes à un NSMutableArray... donc ça marchera, mais il risque de te sortir des exceptions lorsque tu voudras modifier ton array "mem"... (genre mutable truc sent to immutable object, ou quelque chose comme ça)
donc tu pourrais remplacer par
sinon, autre pb, le array renvoyé est autoreleased, donc ajouter un retain si tu comptes le garder en mémoire... avec le mutableCopy, pas de pb, le retain est inutile
Autr question sur le même sujet : où et sous quel nom est sauvegardé le fichier NSUsersDefaults ???
Après quelqus minutes, l'application plante au démarrage : il faut recompiler . Et le cycle recommence : je n'y comprends rien !
Aux prochaines questions !!!
Le fichier NSUserDafaults est le fichier des preferences. Il est donc range dans Depart/Library/Preferences
En ce qui concerne le nom, dans XCode, tu a normalement defini un "identifier" (si tu ne l'as pas fait, ce doit etre com.apple.MyApp ou un truc dans le genre). Le nom du fichier est "identifier".plist
if (self = [super initWithWindowNibName:@Preferences]) {
[self setWindowFrameAutosaveName:@PrefWindow];
}
return self;
}
- (void)windowDidLoad
{
NSUserDefaults *defaults;
defaults = [NSUserDefaults standardUserDefaults];
...
Je fais comme ça et toutes mes valeurs sont en place
::)