Sauvegarde dans les Preferences (bis)

macvelottemacvelotte Membre
21:43 modifié dans API AppKit #1
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é ?

Réponses

  • cbrandtcbrandt Membre
    21:43 modifié #2
    dans la doc de NSUserDefaults:
    <br />- (NSArray *)arrayForKey:(NSString *)defaultName<br />
    


    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
    <br />   mem=[[[NSUserDefaults standardUserDefaults] arrayForKey:@&quot;Memoires&quot;] mutableCopy]; <br />
    


    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
  • macvelottemacvelotte Membre
    21:43 modifié #3
    OK cbrandt, je vais essayer ...


    Autr question sur le même sujet : où et sous quel nom est sauvegardé le fichier NSUsersDefaults ???
  • macvelottemacvelotte Membre
    21:43 modifié #4
    Un phénomène étrange : j'ai fait la correction "cbrandt" ; plus de message à  la compilation. L'application fonctionne bien.

    Après quelqus minutes, l'application plante au démarrage : il faut recompiler . Et le cycle recommence : je n'y comprends rien !
  • macvelottemacvelotte Membre
    21:43 modifié #5
    Individu stupide : j'ai utilisé le même nom de fichier pour deux applications différentes : mais j'ai au moins appris le "truc" "mutableCopy".

    Aux prochaines questions !!!
  • fouffouf Membre
    21:43 modifié #6
    dans 1106818275:

    Autr question sur le même sujet : où et sous quel nom est sauvegardé le fichier NSUsersDefaults ???


    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
  • GercofisGercofis Membre
    21:43 modifié #7
    - (id)init {
        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
    ::)
Connectez-vous ou Inscrivez-vous pour répondre.