Problème avec une NSTableView

UniXUniX Membre
09:26 modifié dans Vos applications #1
Salut.

J'ai un gros bug dans mon appli pour lequel je m'arrache les cheveux depuis quelques temps .... :crackboom:-

J'ai la fenêtre principale de mon appli qui contient, entre autre, une vue perso et une NStableView.
Je clique sur un bouton qui m'affiche une fenêtre secondaire gérée par un window controller. Cette fenêtre contient elle aussi une NSTableView. La sélection de lignes de cette NSTableView me fait changer l'affichage de la vue perso.

Lorsque je valide ma fenêtre et qu'elle se referme, si j'ai une ligne sélectionnée dans la table view, l'appli plante, sinon, ça roule .....

Le code de mon bouton de validation est archi simple :
- (IBAction)valider:(id)sender<br />{<br />	id controlleur = [[NSApplication sharedApplication] delegate];<br />	<br />	[[self window]close];<br />	[controlleur setCheminController:nil];<br />	[NSApp stopModal];<br />}


Je mets une copie de la fenêtre thread du debugger, puisqu'il apparaà®t lorsque l'appli plante :
thread.gif

C'est ça qui me fait dire que le problème vient d'une NSTableView. Mais comment savoir laquelle est incriminée déjà  ?
Ensuite, si vous avez une idée ....

Réponses

  • UniXUniX Membre
    09:26 modifié #2
    En fait je crois que je tiens la solution ....
    Même sans réponse de votre part, je crois que vous avez un effet subliminal sur moi, et je vois de suite les erreurs .... :fouf): :fouf): :fouf):

    Dans mon action de validation, je fais :
    [controlleur setCheminController:nil];
    

    ce qui a pour effet de faire un release sur l'instance du window controller. Mais je suis encore en train d'exécuter du code de ce window controller à  cet instant ....! Donc panique !

    Ce qui est bizarre, c'est que ça ne plante que lorsque une ligne est sélectionnée dans la table view de la fenêtre secondaire. Ca m'a envoyé sur une mauvaise piste ....

    Question d'ordre générale : lorsque vous affichez une fenêtre gérée par un window controller, vous utilisez quoi en général comme code pour le créer et le supprimer ?
  • elfelf Membre
    09:26 modifié #3
    //
    créer / afficher

    if(!windowController)
    [windowController new]; //(ou alloc/init, je met un [super initWithNibName:@MyNib] dans le init)
    [windowController showWindow:nil];

    //
    suprimmer

    //je ne dealloc jamais mes window controllers, je sais pas si c'estr très judicieux, mais on les charge qu'une fois.
Connectez-vous ou Inscrivez-vous pour répondre.