如何从外部命令行调用cocoa应用程序?

时间:2010-06-25 03:11:49

标签: cocoa xcode command-line

我想使用带参数的命令行来调用我的cocoa app,但在我的cocoa app中,如何接收参数,这个参数是一个文件路径,非常感谢你!

2 个答案:

答案 0 :(得分:11)

干净利息:使用NSUserDefaults

如果你这样做:

./MyCocoaApp -argument /path/to/file.txt

然后在你的代码中你可以这样做:

NSDictionary * arguments = [[NSUserDefaults standardUserDefaults] volatileDomainForName:NSArgumentDomain];
NSString * path = [arguments objectForKey:@"argument"];

key-argument开关,值就是它后面的东西。请注意,这不是非常灵活(您不能组合选项:-a -l-al),但对于基本参数,这很简单。

使用多个参数

编辑

./MyCocoaApp -arg1 42 -arg2 "Hello, world!" -arg3 /path/to/file.txt

然后通过提取:

... = [arguments objectForKey:@"arg1"];
... = [arguments objectForKey:@"arg2"];
... = [arguments objectForKey:@"arg3"];

答案 1 :(得分:1)

Cocoa中的常规main函数将命令行参数传递给NSApplicationMain。 NSApplicationMain会忽略这些参数,但您可以根据需要自由解析它们。有几种标准方法可以解析命令行参数,例如getopt,或者您可以直接访问这些值。

int main( int argc , char **argv ) {
  if ( argc == 2 ) gPathArgument = argv[1];
  NSApplicationMain( argc , argv );
}

请注意,启动服务可能会在正常打开应用程序时传递命令行参数,例如在Finder中双击时。一定要处理无法识别的参数。

在现有文件的文件路径的特殊情况下,您可以使用open,如下所示:

open -a /path/to/your.app /path/to/the/file

然后在您的应用程序委托中实现:

- (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename;