I found out how to create a window in Cocoa programmatically but can\'t figure out how to react to events. The window is not reacting to a Quit request or button click.
You need to invoke -[NSApplication run] instead of -[[NSRunLoop currentRunLoop] run]. The reason should be clear if you look at the basic structure of the method:
- (void)run
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[self finishLaunching];
shouldKeepRunning = YES;
do
{
[pool release];
pool = [[NSAutoreleasePool alloc] init];
NSEvent *event =
[self
nextEventMatchingMask:NSAnyEventMask
untilDate:[NSDate distantFuture]
inMode:NSDefaultRunLoopMode
dequeue:YES];
[self sendEvent:event];
[self updateWindows];
} while (shouldKeepRunning);
[pool release];
}
NSApplication encapsulates a lot about how to get an event, how to dispatch them and how to update windows.
I found out how to create a window in Cocoa programmatically …
Why? Why not just make a nib?
The window is not reacting to a Quit request or button click.
How would you quit a window? This isn't Windows 3; applications can have multiple windows on Mac OS X. As such, closing a window and quitting an application are separate actions.
[[NSRunLoop currentRunLoop] run];
Except in rare circumstances, running the run loop is NSApplication's job, and you should leave that to it. Use NSApplicationMain
or -[NSApplication run]
to tell the application to run.
I spent an entire day looking for answers to the GUI and Menu portion of this question. There are not that many current, concise answers out there to the question. So after solving it for myself, I posted an answer which addresses this on Stack here: Cocoa GUI Programmatically. I add a referral to it here to help community members who are digging around for the same answers.
Excellent question. I think Matt Gallagher answered it already, but if you want to go further with this, you'll have to delve into Apple's event-handling documentation. Bear in mind that doing everything programmatically will require a solid understanding of cocoa fundamentals.