App Cocoa de document : plante à  la fermeture...

Nebuchad34Nebuchad34 Membre
décembre 2008 modifié dans API AppKit #1
Bonjour !

Je me lance dans la programmation Cocoa après quelques cours de C gracieusement dispensés par mon école, une découverte de l'Objective-C par initiative personnelle et une lecture du fameux "Programmation Cocoa pour Mac OS X" par le grand manitou Hillegass, 3ème édition.

J'ai réussi à  programmer quelque chose dont je suis assez fier. Je ne pensais pas pouvoir arriver aussi vite à  un résultat pareil. j'ai en effet réussi à  mettre sur pattes une appli de document qui sait enregistrer et ouvrir ses propre fichiers et elle fonctionne plutôt bien, le tout avec une occupation mémoire très correcte.

Un problème subsiste cependant, et je n'en ai pas trouvé la solution sur le net (bien que j'y ai trouvé des gens dans la même situation...) : mon appli plante lamentablement à  le fermeture d'un document.

D'après ce que j'ai compris cela pourrait être dû à  un problème libération de la mémoire qui pourrait etre lié la gestion des fenêtre.

En effet, mon document possède deux fenêtres (dans un même fichier xib) : une fenêtre principale relié au File's Owner (celle par défaut) et une autre relié à  un NSWindowController. Un bouton dans ma fenêtre principal fait appel à  la méthode showWindow: du dit NSWindowController pour ouvrir la deuxième fenêtre. 

:crackboom:- j'espère que vous avez réussi à  me comprendre.

Merci de bien vouloir éclairer ma lanterne. Et si vous êtes sages, je soumettrai mon appli à  votre oeil critique.  :)


(Mac OS 10.5)


NB : j'utilise un NSTimer dans mon prog, or, d'après ce que j'ai lu ici : http://www.objective-cocoa.org/forum/index.php?topic=3088.0 il peut y avoir une explication  la dedans ??

Réponses

  • Nebuchad34Nebuchad34 Membre
    décembre 2008 modifié #2
    Ah ha ! ça vient bien du timer.

    la question maintenant c comment "tuer" le timer à  la fermeture du doc. parceque là  j'ai fiat un test avec un bouton que je clic avant de fermer et qui invoque [minuteur invalidate]; minuteur=nil; mais j'iamerai bien que ça se fasse automatiquement à  la femeture, car j'ai besoin du timer pendant tout le temps d'exécution du doc.


    EDIT : Résolu !

    Pour que cela puisse en aider d'autres :

    déléguer la fenêtre principale au File's Owner dans Interface Builder,
    puis ajouter les deux méthodes suivantes à  votre MyDocument.m :

    - (void)arreterTimer
    {
          [monTimer invalidate];
          [monTimer release];    // uniquement is vous aviez mis un retain avant bien sûr...
          monTimer = nil;
    }

    - (void)windowWillClose:(NSNotification *)aNotification
    {
    [self arreterTimer];
    }
  • Philippe49Philippe49 Membre
    décembre 2008 modifié #3
    Bienvenu  !  :p :p

    Et bonne réponse  :kicking:
    Pour complément, tu peux lire ce post

    [Edit] Je m'aperçois un peu tard que tu avais déjà  donné référence à  ce post ... 
  • 08:29 modifié #4
    dans 1228569043:

    Bienvenu  !  :p :p

    Et bonne réponse  :kicking:
    Pour complément, tu peux lire ce post


    Yeahhhhh première fois que je sers à  quelque chose sur ce forum  :P
    Faut aroser ça (en plus j'ai eu mon permis)  :p :p :p :p
  • schlumschlum Membre
    08:29 modifié #5
    J'ai lu le titre, je savais qu'il y avait un NSTimer là  dedans  :)
    Ah, ça rappelle les jeunes années...  :P
Connectez-vous ou Inscrivez-vous pour répondre.