gpt4 book ai didi

objective-c - 比较不同的 'the launching Cocoa app with parameters' 方法

转载 作者:搜寻专家 更新时间:2023-10-30 19:45:17 25 4
gpt4 key购买 nike

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

  1. NSTask .我可以提供参数,但它似乎不是用于 Cocoa 应用程序,而是用于 UNIX 风格的二进制文件。
  2. 系统函数 (system()) 与 C 一样。我不知道为什么,但似乎没有人推荐这种方法。
  3. NSWorkspace ,但我找不到将参数传递给此函数的方法。

问题

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

已添加

  • NSWorkspace openFile:withApplication: :用于运行“TextMate README.txt”,基于 Roadmaster's answerthis 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 :这是工作代码。我需要提供正确的二进制路径,它看起来不像 Cocoa 方式,因为它用于运行二进制文件,而不是 bundle 。不过,除了文件名之外,还可以提供更多参数。
    [NSTask launchedTaskWithLaunchPath:@"/Applications/TextMate.app/Contents/MacOS/TextMate"     arguments:[NSArray arrayWithObjects:@"hello.txt", nil]];
  • system() :使用 shell,我可以运行“system(open -a ABC --args hello.txt)”,就像我使用命令行一样。 看来这是最简单的方法。

最佳答案

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

还有 Launch Services 函数,例如 LSOpenItemsWithRole

您还可以向 Finder 发送一个 AppleEvent 请求它打开一些东西。

编辑添加:“最佳”是主观的,但我会说如果你可以使用 NSWorkspace,就使用它。如果您不能,例如,您需要传递命令行参数并且需要支持 Leopard,则使用 Launch Services。

关于objective-c - 比较不同的 'the launching Cocoa app with parameters' 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3331401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com