您的所有答案对我来说都很有效,但我找到了另一种更适合我需求的解决方案。我需要从命令行工具启动 Cocoa 应用程序,我通过以下行实现了这一点:
system("nohup /PATH/Arguments.app/Contents/MacOS/Arguments argument1 argument2 &");
nohup是 unix 服务,它允许您将进程附加到自身,因此如果您关闭终端窗口,该进程将保持活动状态。
出现的下一个问题是从 Cocoa 应用程序中捕获参数。AppDelegate.m
“如果main.m
是接收它们并只返回一个 int 的那个,我将如何获取参数。”
在 Apple 的框架和库中,我找到了一个完全解决了这个问题的。这个库名为crt_externs.h,包含两个有用的变量,一个用于学习参数的数量,另一个用于获取参数本身。
extern char ***_NSGetArgv(void);
extern int *_NSGetArgc(void);
因此,在 Cocoa 应用程序的AppDelegate内部,我们将编写以下代码来将参数解析为NSString:
char **argv = *_NSGetArgv();
NSString *argument1 = [NSString stringWithCString:argv[1] encoding:NSUTF8StringEncoding];
NSString *argument2 = [NSString stringWithCString:argv[2] encoding:NSUTF8StringEncoding];
正如我们所见,我们直接跳到参数数组的位置 1,因为位置 0 包含路径本身:
argv[0] = '/PATH/Arguments.app/Contents/MacOS/Arguments'
argv[1] = 'argument1'
argv[2] = 'argument2'
感谢大家的时间和帮助。我从你们那里学到了很多。我也希望这个答案对其他人有帮助:)
干杯和快乐的编码!