views:

237

answers:

2

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. Please help me.

+4  A: 

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).

Peter Hosey
+1  A: 

Thanks @peter hosey.

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

Open the nib for your file. On the Window you need to wire the "Referencing Outlet" of the window to the "Files Owner" and choose Window. Otherwise nothing will work.

John Ballinger