views:

1081

answers:

1

I'm looking for a good way to tell my Cocoa application to quit itself. Rest assured that this will not be used for production code. I'm just looking for an easy way to run one test and then close the application during debugging.

I have found that exit(0); will close the app, but it bypasses all of the normal application exit procedures, and I would like to keep all of them in place.

Essentially I want things to work as if a user pulled "Quit" from the menu, but I want it to happen automatically after I have finished with my test.

My code currently looks like this:

#if (SUPERFANCY_TESTING_MODE)
    [self doSomething];
    exit(0); // <-- I need something better to go here
#endif
+11  A: 

You can pretty much rest assured that your app is going to get killed at least some of the time. Thus, defending against exits the like of exit(0); is required.

However, NSApplication implements the -terminate: method.

[NSApp terminate: nil]; ought to do what you want.

I would generally suggest posting it via -performSelector:afterDelay: with a delay of 0.0 to force it to happen at the top of the next pass through the event loop.

bbum
That works perfectly. Thank you!
e.James
For those of you who are dense (like me) and couldn't get the syntax exactly right (I kept forgetting the colon after terminate) the full line would read: [NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.0];
BarrettJ