On May 8, 2009, at 5:03 PM, Andrew Farmer wrote:
A much simpler solution would be to preprocess the arguments which you pass to NSApplicationMain. Run through everything in argv, then create a new array of arguments from that with all arguments your application wants to handle removed and pass that to AppKit.
This doesn't work. As the documentation for NSApplicationMain notes, it doesn't actually make any use of the argc and argv parameters it receives. Instead, it just looks at the original argument list using _NSGetArgc() and _NSGetArgv().
That makes it pretty much impossible to integrate your own scheme for command-line arguments that differs from what Cocoa expects. Cocoa will allow you to set defaults in the NSArgumentDomain domain using pairs like -<default> <value>, and it will process other arguments as files to open, as you've seen.
If you need to process command line arguments, you either have to follow the above scheme or write a non-application (a.k.a. a command- line tool).
Brian, your proposed scheme of essentially disabling the - application:openFiles: delegate method until after - applicationDidFinishLaunching: will probably work. Have you considered using the defaults system for the control of your application that you're seeking to do with command-line switches? If you do that, you should get argument processing "for free". This does require that all switches have a value, which may entail changing present/absent switches to boolean-valued defaults (e.g. "- enableFrobozzingOfWizbangs YES" instead of merely "- enableFrobozzingOfWizbangs"). It also doesn't work if you allow the use of a given switch multiple times to accumulate values. So, it doesn't work for all purposes, but it might for yours.
Regards, Ken _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com