Portage d'une application sur un autre MAC.

macvelottemacvelotte Membre
15:11 modifié dans Vos applications #1
Je suis content de moi (!!!) : j'ai une application calculette, à  mémoires "permanentes" qui fonctionne bien ; les mémoires sont gardées dans NSUserDefaults, donc dans le fichier Bibliothèque/Preferences/com.apple.myCocoaApp.plist de mon répertoire.

Si je lance l'application et que ce fichier n'existe pas, il y aura plantage.
Il doit bien y avoir un bout de code avec utilisation de "nil" qui signale que le NSUserDefaults n'a pas encore été créé et qu'il faut passer outre à  sa lecture.

- (void)awakeFromNib   
{
NSMutableArray *mem;
mem=[[[NSUserDefaults standardUserDefaults] arrayForKey:@Memoires] mutableCopy];

"code à  introduuire ici ????"

M1 = [(NSNumber *)[mem objectAtIndex:0] doubleValue];
M2= [(NSNumber *)[mem objectAtIndex:1] doubleValue];
M3= [(NSNumber *)[mem objectAtIndex:2] doubleValue];
M4= [(NSNumber *)[mem objectAtIndex:3] doubleValue];
[self displayM];
}

Réponses

  • mpergandmpergand Membre
    janvier 2005 modifié #2
    Salut,

    J'utilise une entrée avec le nom de l'application (par exemple), si la valeur est nil, alors c'est que le fichier de prefs n'existe pas et j'initialise avec les valeurs par défauts.

    Un détail: "com.apple.myCocoaApp.plist" c'est toi Apple ! Justement j'ai plein de questions à  te poser ;D
    Je pense que "fr.macvelotte.myCocoaApp" comme identifiant de bundle (CFBundleIdentifier) conviendrait mieux ;)
  • cbrandtcbrandt Membre
    15:11 modifié #3
    dans 1107083621:

    "code à  introduuire ici ????"


    quelque chose comme ça ?

    <br />- (void)awakeFromNib     <br />{<br />   NSMutableArray *mem;<br />   mem=[[[NSUserDefaults standardUserDefaults] arrayForKey:@&quot;Memoires&quot;] mutableCopy];<br /><br />&nbsp; &nbsp; if (mem)<br />&nbsp; &nbsp; {<br />   &nbsp; &nbsp; M1 = [(NSNumber *)[mem objectAtIndex:0] doubleValue];<br />   &nbsp; &nbsp; M2= [(NSNumber *)[mem objectAtIndex:1] doubleValue];<br />  &nbsp; &nbsp;  M3= [(NSNumber *)[mem objectAtIndex:2] doubleValue];<br />   &nbsp; &nbsp; M4= [(NSNumber *)[mem objectAtIndex:3] doubleValue];<br />&nbsp; &nbsp; }<br />&nbsp; &nbsp; else<br />&nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; M1 = M2 = M3 = M4 = 0;<br />&nbsp; &nbsp; }<br />   [self displayM];<br />}<br />
    

  • fouffouf Membre
    15:11 modifié #4
    Il ya une autre solution qui consiste a implementer la methode +initialize dans MyDocment ou dans le controller principal de l'appli.
    Voila un exemple :
    <br />+(void) initialize<br />{<br />	NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];<br />	NSMutableArray *mem = [NSMutableArray array];<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; for (int i =0 ; i&lt;4; i++){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [mem addObject:[NSNumber numberWithDouble:0.0]];<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br /> <br />&nbsp; &nbsp; &nbsp;  [defaults setObject:mem forKey:@&quot;Memoires&quot;];<br />}<br />
    


    Cette facon de faire a l'avantage d'eviter un if a chaque demarage ou a chaque ouverture d'un nouveau document.

    Verifie juste que le test logique est bon (i<4) il se peut qu'il faille changer  :o
  • cbrandtcbrandt Membre
    15:11 modifié #5
    y'en a qui ont du mal avec la boucle 'for', on dirait...  :) :) :) :)
  • fouffouf Membre
    15:11 modifié #6
    dans 1107101242:

    y'en a qui ont du mal avec la boucle 'for', on dirait...  :) :) :) :)


    Je confirme  :) :) :)

    Au lieu de te moquer, dis moi comment on utilise le test logique.  :why?:
  • muqaddarmuqaddar Administrateur
    15:11 modifié #7
    [tt]int i;

    for (i =0; i<4; i++) {
      [mem addObject:[NSNumber numberWithDouble:0.0]];
    }
    [/tt]

    ;) ça doit être ça
  • cbrandtcbrandt Membre
    15:11 modifié #8
    :)

    en gros:
    si la condition est vraie, on recommence...

    en détail:

    a. - la 1ère partie du 'for' est exécutée (i=0)
    puis
    b. - le bloc d'instruction qui suit est exécutée (ce qu'il y a entre { et } )
    c. - la 3ème partie du 'for' est exécutée (i++)
    d. - la condition est évaluée (i<4): si elle est vrai, on recommence en b.

    donc

    for (int i =0 ; i<4; i++){
    [mem addObject:[NSNumber numberWithDouble:0.0]];
    }

    fera exécuter le addObject 4 fois (avec i=0, puis 1, puis 2, puis 3)
    et après le for, i vaudra 4.
  • nucleusnucleus Membre
    15:11 modifié #9
    On peut mettre aussi des valeurs par défaut pour les préférences..
    Ce seront ces valeurs qui seront retournée si le fichier de préférence n'existe pas..

    Tant que ces valeurs ne sont pas modifiées, elles ne seront pas écrites dans le fichier de préférences
  • macvelottemacvelotte Membre
    15:11 modifié #10
    Voilà  au moins une constatation satisfaisante : il n'y a pas qu'une solution !

    Je vais essayer les "différents cas de figure ...".

    Tous ces renseignements sont très encourageants.

    Merci ! ::)
Connectez-vous ou Inscrivez-vous pour répondre.