有没有更好的方法从GUI或命令行启动相同的应用程序

时间:2011-01-03 17:52:52

标签: cocoa macos command-line-interface launching-application

我找到了一种运行我的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];
}

非常感谢。 中号

1 个答案:

答案 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)