I'm not sure if the way I do it is by the book, but basically I declare a variable for the second window, as in:
SecondWindowController *secwincontroller;
Then call it up like so:
- (IBAction)showsecondwindow:(id)sender
{
if (secwincontroller == nil) // Check to see if we've already loaded the second window controller
{
secwincontroller = [[SecondWindowController alloc] initWithWindowNibName:@"SecondWindow"];
}
//Now that we have a controller, tell it to show the window
[secwincontroller showWindow:self];
}