我找到了一种运行我的Cocoa(GUI)应用程序的方法。从正常的双击它, 或者从CLI。
我意识到当应用程序从双击(GUI)启动时,它会返回2的参数计数( argc )。
但是当从CLI启动时,它的 argc 为1.只要我自己不提出任何参数。
这意味着我可以使用 if .. else .. 来确定应用的启动方式。
这适用于我的应用,因为我不需要放置参数。
但我想知道是否有更好的方法。
以下是 main.m
中代码的示例int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
//This determins if the app is launched from the command line or app itself is opened.
if (argc == 1) {
//app was run from CLI
// Create a object
MyClass *mMyClass;
mMyClass = [[MyClass alloc] init];
// Read the Buffer
[mMyClass readBuffer];
// Write out file on disk
[mMyClass createFile];
[mMyClass doMoreStuff];
[mMyClass release];
mMyClass = nil;
return 0;
} else {
//app was doubled click, (Opened)
return NSApplicationMain(argc, (const char **) argv);
;
// */
// return NSApplicationMain(argc, (const char **) argv);
}
[pool drain];
}
非常感谢。 中号
答案 0 :(得分:1)
除了检查argc之外,您可能还需要考虑检查argv值本身。
对于通过双击运行的应用:
1/4/11 9:43:30 AM Untitled[605] argc: 2
1/4/11 9:43:30 AM Untitled[605] argv0: /tmp/Untitled/build/Debug/Untitled.app/Contents/MacOS/Untitled
1/4/11 9:43:30 AM Untitled[605] argv1: -psn_0_131104
对于在命令行中运行的应用:
1/4/11 9:43:44 AM Untitled[608] argc: 1
1/4/11 9:43:44 AM Untitled[608] argv0: ./Untitled
1/4/11 9:43:44 AM Untitled[608] argv1: (null)