Because menu items are enabled based on the responder chain.
In your case, you can use the terminate:
selector instead of your own.
As this is declared in the NSApplication
class, which is also part of the responder chain, the item will then be always active.
NSMenuItem *quit = [[NSMenuItem alloc] initWithTitle:@"Quit" action:@selector(terminate:) keyEquivalent:@""];
More on this here: Cocoa Event Handling Guide