我需要从应用程序启动“TextMate”,我使用了以下代码。
[NSTask launchedTaskWithLaunchPath:@"/Applications/TextMate.app" arguments:[NSArray arrayWithObjects:@"hello.txt", nil]];
但是,我得到了以下错误返回。
*** NSTask: Task create for path '/Applications/TextMate.app' failed: 22, "Invalid argument". Terminating temporary process.
- 我的代码有什么问题?我刚刚尝试运行“TextMate hello.txt”。
已添加
我可以让它按如下方式运行。
[NSTask launchedTaskWithLaunchPath:@"/Applications/TextMate.app/Contents/MacOS/TextMate" arguments:[NSArray arrayWithObjects:@"hello.txt", nil]];
然后我问了another question看看有多少其他可用的方法。
最佳答案
在这种情况下,无效参数是应用程序的名称。
如果您查看 NSTask 的文档,您会发现您使用的方法基本上是低级 exec() 系统调用的包装器。这意味着您需要提供实际可执行文件或二进制文件的名称才能创建进程。在你的例子中,你给它一个目录(使用终端确认/Applications 中的大多数应用程序包都是目录)。这就是它呕吐的原因。
您可以查看 TextMate 的捆绑目录以找到实际的可执行文件(应该位于/Applications/TextMate.app/Contents/MacOS 中的某处)。然后您可以修改代码以调用实际的可执行文件。
但是,看起来正确的 Cocoa-ish 方法是使用 NSWorkspace,您可以查看它的 openFile:withApplication: 方法,它似乎可以满足您的需要,在这种情况下您可以指定应用程序包目录作为参数,您最初采用的方式。
官方文档是here .
顺便说一句,我不能完全相信它;见this StackOverflow answer了解有关此主题的更多信息。
关于objective-c - 使用 'launchedTaskWithLaunchPath' Cocoa/objective-c API 启动应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3330067/