Code de base pour une "Non Document Based" App

TiffTiff Membre
septembre 2004 modifié dans API AppKit #1
Que pensez-vous de :
<br />- (id)init {<br /> self = [super init];<br />      // création, si besoin, du dossier DvdThèque dans la Bibliothèque de l&#39;utilisateur ; merci Eddy58<br />    // ne pas oublier de remplacer ~ par le dossier principal de l&#39;utilisateur /Users/jerome avec stringByExpandingTildeInPath<br />&nbsp; &nbsp; &nbsp;  BOOL repExist;<br /> if (![[NSFileManager defaultManager] fileExistsAtPath: [@&quot;~/Library/Application Support/DvdThèque&quot; stringByExpandingTildeInPath] isDirectory:&amp;repExist] &amp;&amp; repExist]);<br />              [[NSFileManager defaultManager]<br />                   createDirectoryAtPath: [@&quot;~/Library/Application Support/DvdThèque&quot; stringByExpandingTildeInPath] attributes: nil];<br />      NSString *monFichier = [@&quot;~/Library/Application Support/DvdThèque/DvdThèqueData&quot; stringByExpandingTildeInPath];<br /> maListeDeFilms = [[NSMutableArray alloc] initWithArray:[NSUnarchiver unarchiveObjectWithFile: monFichier]];<br />    // si le fichier n&#39;existe pas, initialisation de maListeDeFilms<br /> if (maListeDeFilms == nil) maListeDeFilms = [[NSMutableArray alloc] init];<br />        return self; }<br />    <br />- (BOOL)applicationShouldTerminateAfterLastWindowClosed: (NSApplication *)theApplication {<br />  return YES; } // merci Mpergand<br />   <br />- (NSApplicationTerminateReply)applicationShouldTerminate: (NSApplication *)sender {<br />        if ([self sauvegarde]) return NSTerminateNow; // merci ClicCool<br />   NSLog(@&quot;Eh ! Toi là -haut ! Regarde donc pourquoi je ne peux pas enregistrer !&quot;);<br />        return NSTerminateCancel; } // Heureusement que Finder permet de Forcer à  quitter !<br />       <br />- (BOOL)sauvegarde {<br />    NSString *monFichier = [@&quot;~/Library/Application Support/DvdThèque/DvdThèqueData&quot; stringByExpandingTildeInPath];<br />     return [NSArchiver archiveRootObject: maListeDeFilms toFile: monFichier]; }<br />       <br />- (void)dealloc {<br />   NSLog(@&quot;Si ce message s&#39;affiche, j&#39;arrête de bosser et je me consacre entièrement à  Cocoa.&quot;); // merci Tiff<br />   [maListeDeFilms release];       <br />  [super dealloc]; }<br />

Réponses

  • Eddy58Eddy58 Membre
    septembre 2004 modifié #2
  • TiffTiff Membre
    09:18 modifié #3
    Ah le coquin !
    Mais j'avais eu le temps de lire ton message avant que tu ne le modifies  ;D

    J'ai ajouté dans l'exemple ci-dessus isDirectory: c'est quand même plus sûr.  :-\
  • ClicCoolClicCool Membre
    09:18 modifié #4
    dans 1096140257:

    - (NSApplicationTerminateReply)applicationShouldTerminate: (NSApplication *)sender {
    if ([self sauvegarde]) return NSTerminateNow; // merci ClicCool
    NSLog(@Eh ! Toi là -haut ! Regarde donc pourquoi je ne peux pas enregistrer !);
    return NSTerminateCancel; } // Heureusement que Finder permet de Forcer à  quitter !


    dans 1096212940:

    Bon, alors, tout va bien ?
    ça m'a donné l'occasion de faire fonctionner mon NSLog(@Et toi là  haut..);
    Stressant, une appli qui ne veut pas quitter !


    En cas d'échec de la sauvegarde, faut pas empécher l'appli de quitter en fait.

    1- Il faut juste au minimum, avant de quitter, prévenir l'utilisateur que la sauvegarde a échouée (la moindre des choses ;) ).

    2- Si tu peux, le mieux est d'être le plus explicite possible dans l'alerte à  l'utilisateur en spécifiant la cause de l'échec.

    3- Le plus souhaitable étant également dans cette alerte de lui proposer une solution à  son problème et une oportunité de la mettre en pratique avant que l'appli quitte vraiment

    Exemple d'alerte utile:

    "Les données n'ont pu être sauvegardées car le volume "monCherDD" est saturé.
    "Essayez de supprimer des fichiers de ce volume et recommencez"

    avec les boutons:
    - "tant pis quitter quand même"
    - "oups, ne quittez pas mademoiselle, je vais voir ce que je peux faire"
  • TiffTiff Membre
    09:18 modifié #5
    Oui, je me doutais que ça ne te plairait pas. Mais pour l'instant, mon NSLog me suffit ; je ne souhaite pas m'aventurer dans cette direction. J'ai juste besoin de savoir que ce que je viens d'écrire n'est pas enregistré. Bon, le NSTerminateCancel ne sert à  rien, je te l'accorde. Mais il me fait plaisir.  :D
  • ClicCoolClicCool Membre
    09:18 modifié #6
    dans 1096214552:

    Oui, je me doutais que ça ne te plairait pas. Mais pour l'instant, mon NSLog me suffit ; je ne souhaite pas m'aventurer dans cette direction. J'ai juste besoin de savoir que ce que je viens d'écrire n'est pas enregistré. Bon, le NSTerminateCancel ne sert à  rien, je te l'accorde. Mais il me fait plaisir.  :D

    Non non, ça me plait bien en fait :)
    Super ton idée de regrouper ici les méthodes à  implémenter pour gérer des données sur disque dans une appli "non document based".
    C'est toi qui t'es plaint, à  juste titre, du côté peu cool d'une appli qu'il faut parfois forcer à  quitter pour de bêtes soucis de sauvegarde non gérés. ;) ;D
  • TiffTiff Membre
    09:18 modifié #7
    dans 1096215961:

    Super ton idée


    8)
Connectez-vous ou Inscrivez-vous pour répondre.