我想使用带参数的命令行来调用我的cocoa app,但在我的cocoa app中,如何接收参数,这个参数是一个文件路径,非常感谢你!
答案 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;