Ouvrir une deuxième fenêtre : Besoin d'aide SVP !

Bonjour,

 

Je suis en train de travailler sur mon premier programme cocoa, et un premier souci...

 

J'ai un bouton sur ma fenêtre principale, et j'aimerais, au clic, qu'il ouvre une deuxième fenêtre

 

J'ai donc créé une nouvelle classe irritée de NSWindowController avec l'option de création du fichier .xib associé.

 

J'ai donc 3 nouveaux fichiers : Scd_winWindowColtroller.h, Scd_winWindowColtroller.m et Scd_winWindowColtroller.xib

 

dans mon AppDelegate.h, j'ai ajouté



@property (strong) NSWindowController *secondaryWindowController;

puis dans mon AppDelegate.m, au niveau du code de mon bouton



- (IBAction)GO_act:(id)sender {
NSWindowController *secondaryWindowController=[[NSWindowController alloc] initWithWindowNibName:@Scd_winWindowController];
[secondaryWindowController showWindow:self];
}

Quand je clic sur le bouton, la fenêtre s'affiche et se referme tout de suite.


 


J'ai cherché et j'ai trouvé plusieurs réponses, mais aucune des solutions proposées ne fonctionne... je dois faire une erreur quelque part, mais où...


 


Merci pour votre aide,


 


Alex


Réponses

  • AliGatorAliGator Membre, Modérateur
    Hello


    Tu fais une propriété... mais tu ne l'utilises pas, utilisant à  la place une variable locale à  ta fonction !
  • CéroceCéroce Membre, Modérateur
    Pour compléter la réponse d'Ali: le window controller est instancié et ouvre sa fenêtre, mais comme aucun autre objet ne le retient, alors il est immédiatement libéré, et il ferme sa fenêtre.

    C'est un problème de gestion mémoire. Utilise la propriété que tu as déclarée.
  • Merci de vos réponses!


    Le problème, c'est qu'étant débutant, j'etais persuadé d'utiliser la variable de la propriété ...


    Ce que j'avais compris:


    En faisant @property.... Je pensais déclarer un pointeur sur un NWwindowcontroller.

    Dans le fonction je l'instanciais + réservation mémoire (malloc) et je le faisais pointer sur ma nouvelle fenêtre ....


    Pourriez vous me dire ou est mon erreur de raisonnemet svp ?


    Alex
  • berfisberfis Membre
    mai 2014 modifié #5

    Si tu veux utiliser la propriété que tu as définie dans l'interface, tu dois écrire:



    - (IBAction)GO_act:(id)sender {
    self.secondaryWindowController=[[NSWindowController alloc] initWithWindowNibName:@Scd_winWindowController];
    [self.secondaryWindowController showWindow:self];
    }

    Faute de quoi ta méthode GO_act déclare un autre objet (de même nom, mais avec une adresse différente) qui ne vit que le temps que ta méthode s'exécute. A la sortie, son retain est à  zéro et ARC le libère.


  • berfisberfis Membre


    J'ai donc créé une nouvelle classe irritée de NSWindowController




    En effet, ta classe semble fâchée...  :D

  • Ca passe si je dis que c'était fait exprès ? lol


     


    En tout cas ça nous aurait privé d'une jolie blague...


     


    C'est cool de voir un forum où règne la bonne humeur ! ça change de certains...


     


    Et merci pour la solution, ça marche super !


     


    Alex


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