Search code examples
cocoanibnswindowcontroller

How to close a window (unload a NIB)?


I have a custom NSWindowController subclass that loads a NIB file during initialization like this:

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

The nib contains some custom views and some other controls. The NSWindowController is the file's owner and at least one of the views even binds to it.

Simply, what do I have to do to close and release that window? I spend the whole day trying to figure that out and I am still clueless.


Solution

  • You don't unload a nib; “loading” it is simply unarchiving the objects that are archived within it. That's not a state that persists indefinitely; it's a momentary action. Once you've unarchived the object, it doesn't matter where it came from.

    If you were not in a window controller, then:

    • To close a window, you would send it a close message.
    • To close and release a window, you would need to either have its releasedWhenClosed property turned on (you can do this in IB) before you send it a close message, or send it a release message after the close message.

    But since you are in a window controller, just send yourself a close message.

    See also “Window Closing Behavior” in the Document-Based Applications Overview (document-based apps being the main users of window controllers).