NSWindowController windowDidLoad not called

前端 未结 4 1946
独厮守ぢ
独厮守ぢ 2020-12-14 11:50

I have a simple Cocoa app using a NSWindowController subclass. In the nib I have set:

  • File Owner\'s class to my NSWindowController subclass
  • The \'Wi
相关标签:
4条回答
  • 2020-12-14 12:35

    It's perfectly fine to instantiate the window controller through a nib. Rather than use windowDidLoad as your hook, in that case you'll want to use awakeFromNib.

    0 讨论(0)
  • 2020-12-14 12:37

    if you wrote

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

    try instead

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

    it makes the difference ! Of course the first line was a mistake...

    0 讨论(0)
  • 2020-12-14 12:41

    You're trying to create the instance of NSWindowController by instantiating it in another nib. However, when you instantiate an object in a nib file, it is initialized by calling -initWithCoder:.

    -initWithCoder: is not a designated initializer of NSWindowController, so your instance of NSWindowController never actually loads its nib.

    Instead of instantiating your NSWindowController instance by placing it in the MainMenu.xib file in Interface Builder, create it programmatically:

    In AppDelegate.h:

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

    In AppDelegate.m:

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

    In YourWindowController.m:

    @implementation YourWindowController
    - (id)init
    {
        self=[super initWithWindowNibName:@"YourWindowNibName"];
        if(self)
        {
            //perform any initializations
        }
        return self;
    }
    @end
    
    0 讨论(0)
  • 2020-12-14 12:41

    The window might be loaded on demand - try sending window to yourself in -init. See the discussion of -[NSWindowController loadWindow] in the documentation for more info.

    0 讨论(0)
提交回复
热议问题