Question

J'ai une application simple de cacao en utilisant une sous-classe NSWindowController. Dans la plume, j'ai ensemble:

  • la classe de fichier propriétaire à ma NSWindowController sous-classe
  • La sortie « Window » du propriétaire du fichier au principal NSWindow dans la pointe.

La méthode init de ma sous-classe NSWindowController est appelé (je l'appelle super), mais peu importe ce que je ne windowDidLoad est jamais appelé.

Je dois manquer quelque chose d'évident, mais pour la vie de moi je ne peux pas comprendre ce qu'elle est.

Était-ce utile?

La solution

Vous essayez de créer l'instance de NSWindowController par instanciation dans une autre plume. Toutefois, lorsque vous instancier un objet dans un fichier nib, il est initialisé en appelant -initWithCoder:.

-initWithCoder: n'est pas désigné initialiseur de NSWindowController, de sorte que votre instance de NSWindowController jamais réellement charge sa plume.

Au lieu d'instancier votre instance NSWindowController en le plaçant dans le fichier MainMenu.xib dans Interface Builder, créez programme:

AppDelegate.h :

@class YourWindowController;
@interface AppDelegate : NSObject
{
    YourWindowController* winController;
}
@end

AppDelegate.m :

@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification*)notification
{
    winController = [[YourWindowController alloc] init];
    [winController showWindow:self];
}
- (void)dealloc
{
    [winController release];
    [super dealloc];
}
@end

YourWindowController.m :

@implementation YourWindowController
- (id)init
{
    self=[super initWithWindowNibName:@"YourWindowNibName"];
    if(self)
    {
        //perform any initializations
    }
    return self;
}
@end

Autres conseils

Il est tout à instancier le contrôleur de fenêtre par une pointe. Au contraire, dans ce cas que l'utilisation windowDidLoad comme crochet, vous aurez envie d'utiliser awakeFromNib.

La fenêtre peut être chargée à la demande - essayez d'envoyer window à vous dans -init. Voir la discussion de -[NSWindowController loadWindow] dans la documentation pour plus d'informations.

si vous avez écrit

TTEst *test3 = (TTEst *)[[NSWindowController alloc] initWithWindowNibName:@"TTEst"];

essayer place

TTEst *test3 = [[TTEst alloc] initWithWindowNibName:@"TTEst"];

il fait la différence! Bien sûr, la première ligne était une erreur ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top