2010-04-15 6 views
3

je une coutume NSWindowController sous-classe qui charge un fichier NIB lors de l'initialisation comme ceci:Comment fermer une fenêtre (décharger un NIB)?

self = [super initWithNibNamed:@"myNib"]; 
if (self != nil) { 
    [self window]; 
} 

La pointe contient des vues personnalisées et d'autres contrôles. Le NSWindowController est le propriétaire du fichier et au moins une des vues s'y lie même. Simplement, que dois-je faire pour fermer et libérer cette fenêtre? Je passe toute la journée à essayer de comprendre cela et je suis toujours désemparé.

Répondre

6

Vous ne déchargez pas une plume; "Charger" c'est simplement désarchiver les objets qui y sont archivés. Ce n'est pas un état qui persiste indéfiniment; c'est une action momentanée. Une fois que vous avez désarchivé l'objet, peu importe d'où il vient.

Si vous n'êtes pas dans un contrôleur de fenêtre, puis:

  • Pour fermer une fenêtre, vous send it a close message.
  • Pour fermer et libérer une fenêtre, vous devez soit avoir its releasedWhenClosed property allumé (vous pouvez le faire en IB) avant de l'envoyer un message close ou envoyer un message release après le message close.

Mais puisque vous êtes dans un contrôleur de fenêtre, juste send yourself a close message.

Voir aussi “Window Closing Behavior” dans la Présentation des applications basées sur les documents (les applications basées sur des documents étant les principaux utilisateurs des contrôleurs de fenêtre).

13

Merci @peter hosey.

[self close]; // will work only if your nib is wired up correctly. 

Ouvrez la plume pour votre fichier. Sur la fenêtre, vous devez câbler le «Référencement Outlet» de la fenêtre sur le «Propriétaire de fichiers» et choisissez Fenêtre. Sinon, rien ne fonctionnera.

+1

Merci @John Ballinger! Tu as sauvé mes deux jours !!! Votre ajout de la mise en place de la plume est l'indice. – swdev

+0

Certainement une solution rapide pour "pourquoi ne pas fermer le travail?!?!" – stevesliva

Questions connexes