Ouvrir une 2eme fenetre depuis un xib supplémentaire ?

Bonjour



Pour un apprentissage, j'essaye d'ouvrir une fenetre a partir d'un deuxieme xib, mais je n'y arrive pas, je fois un "flash" de la fenetre, qui disparait aussitot. ( la methode windowDidLoad n'est pas appelée ) , le xib charge bien car j'entre bien dans awakeFromNib.



Je pense que je dois avoir des problèmes de connexions ou autre, mais je ne trouve pas le problème.



J'ai mis mon projet ici, ci quelqu'un peu m'aider, merci !!

http://www.midoritech.com/essai/deuxfenetres.zip





Pat.
Mots clés:

Réponses

  • CéroceCéroce Membre, Modérateur
    Bonjour Patricia,



    ARC est activé dans ton projet.

    Dans cette méthode:


    <br />
    - (IBAction)ouvreFenetre:(id)sender<br />
    {<br />
    	NSWindowController  *nwc ;<br />
    	NSWindow			*fenetre ;<br />
      <br />
    <br />
      <br />
    	nwc = [[NSWindowController alloc] initWithWindowNibName:@&quot;mafenetre&quot; owner:self] ;<br />
    	if ( nwc &#33;= NULL)<br />
    	{<br />
      <br />
    		NSLog( @&quot;Windows controller ok&quot;) ;<br />
    		fenetre = [nwc window] ;<br />
    		[fenetre makeKeyAndOrderFront:self];<br />
    	}<br />
    }<br />
    




    Le window controller sera relâché à  la fin de la méthode, et avec lui, la fenêtre qu'il gère.

    Déclare une propriété (strong) pour conserver le window controller.



    Je t'encourage à  étudier le fonctionnement de ARC pour ne pas retomber dans ce genre de pièges.
  • Holalala merci, j'aurai pu chercher longtemps, c'était tout simple !!!
  • Personnellement, je crée carrément une classe héritant de NSWindowController que j'instancie dans l'AppDelegate, ce qui permet tout le confort des connexions dans Interface Builder.

    Cette méthode dans ta classe dérivée :
    <br />
    - (id)init<br />
    {<br />
        if(&#33;[super initWithWindowNibName:@&quot;LeNomDeMonFichierXib&quot;]){<br />
    	   <br />
    	    return nil;<br />
        }<br />
    }<br />
    




    et le tour est joué...
  • En ce qui me concerne, je crée un nouveau fichier : un classe Cocoa héritée de NSWindowController et je coche la case proposant de créer un fichier xib associé. De la sorte, les connexions entre les fichiers .h, .m et .xib sont déjà  établies. Puis, dans mon code, quand je veux afficher ma fenêtre, je fais ça :



    Pour le fichier .h de la classe "principale" (souvent l'AppDelegate)
    <br />
    -@property (strong) SecondaryWC *secondaryWindowController<br />
    




    et dans le corps du code, quand je veux lancer ma fenêtre :


    <br />
    SecondaryWC *aWindowController=[[SecondaryWC alloc]initWithWindowNibName:@&quot;SecondaryWC&quot;]<br />
    [self setSecondaryWindowController:aWindowController]<br />
    




    En créant le fichier xib en même temps que les fichiers de la classe, non seulement les liaisons sont déjà  établies mais les fichiers porteront le même nom (à  l'extension près évidemment)
Connectez-vous ou Inscrivez-vous pour répondre.