代码之家  ›  专栏  ›  技术社区  ›  prosseek

比较不同的“启动Cocoa应用程序与参数”方法

  •  4
  • prosseek  · 技术社区  · 14 年前

    我发现至少有三种方法可以从应用程序启动Mac OS X应用程序。

    1. NSTask . 我可以给出参数,但似乎它不是用于cocoa应用程序,而是一个unix风格的二进制文件。
    2. 系统函数(system())与c的方法相同。我不知道原因,但似乎没有人推荐这种方法。
    3. NSWorkspace ,但我找不到将参数传递给此函数的方法。

    问题

    • 问题1:除了三种方法之外,还有其他方法可以启动应用程序吗?
    • 问题2:每种方法的优缺点是什么?
    • 问题3:启动应用程序(从应用程序)的首选方法是什么?
    • 问题4:使用参数(从应用程序)启动应用程序的首选方法是什么?
    • 问题5:打开文档(从应用程序)的首选方法是什么?

    补充

    • NSWorkspace openFile:withApplication: :用于运行“textmate readme.txt”,基于 Roadmaster's answer this code 我可以这样做。 但是, 我无法为应用程序提供参数。
        NSString * path = @"/Users/smcho/Desktop/README.txt";
        NSURL * fileURL = [NSURL fileURLWithPath: path];
        NSWorkspace * ws = [NSWorkspace sharedWorkspace];
        [ws openFile:[fileURL path] withApplication:@"TextMate"];
    
    • NSWorkspace launchApplicationAtURL:options: : 适用于10.6或更高版本 ,您可以从 this question .
        NSURL * bURL = [[NSWorkspace sharedWorkspace] URLForApplicationWithBundleIdentifier:@"com.macromates.textmate"];
        NSWorkspace * ws = [NSWorkspace sharedWorkspace];
        [ws launchApplicationAtURL:bURL options:NSWorkspaceLaunchDefault configuration:nil error:nil];
    
    • NSTask :这是工作代码。我需要给出正确的二进制路径,以及 它看起来不像可可豆的方式,因为它运行的是二进制文件,而不是捆绑文件。 但是,可以提供更多的参数,而不仅仅是文件名。
        [NSTask launchedTaskWithLaunchPath:@"/Applications/TextMate.app/Contents/MacOS/TextMate"     arguments:[NSArray arrayWithObjects:@"hello.txt", nil]];
    
    • system() :使用shell,我可以运行“system(open-a abc--args hello.txt)”,就像使用命令行一样。 看来这是最简单的方法。
    2 回复  |  直到 11 年前
        1
  •  3
  •   JWWalker    14 年前

    在10.6及更高版本中,nsworkspace有一个方法 launchApplicationAtURL:options:configuration:error: 可用于向应用程序传递参数。

    还有一些启动服务功能,如 LSOpenItemsWithRole .

    你也可以发送一个AppleEvent到finder请求它打开一些东西。

    编辑添加:“最佳”是主观的,但我想说,如果您可以使用nsworkspace,请使用它。如果不能,例如,您需要传递命令行参数,并且需要支持leopard,那么就使用launch services。

        2
  •  0
  •   ninjaneer    11 年前

    通过使用脚本桥,您可以使用 activate 启动可可应用程序。见: Scripting Bridge .