4

有人可以展示一个关于如何结合使用 NSTask 和 NSPipe 来执行此操作的快速示例:

Charlie AI - 通过终端运行与 AI 通信

我想使用 xcode 和 Objective c 为它创建一个漂亮的 GUI。我想要 2 个 NSTextFields 用于查理的响应和用户输入。然后有一个发送按钮将用户输入发送到命令行,然后得到 charlie 的响应并将其发布到 NSTextField 中。

我可以处理 GUI 的东西(NSTextField 等),但我需要 Objective-c 编码部分的帮助。

谢谢!

以利亚

4

2 回答 2

4

Apple 有一些很好的示例代码,展示了如何完成大部分工作。

TaskWrapper.m包含所有聪明的东西,但由于您希望能够向任务发送数据,您需要稍微扩展它,如下所示:

[task setStandardInput: [NSPipe pipe]];

要将输入发送到任务,您可以执行以下操作:

[[[task standardInput] fileHandleForWriting] writeData: ...];

要将 NSTextField 的值转换为数据,您可以执行以下操作:

NSData *data = [[inputTextField stringValue] 
                dataUsingEncoding:NSUTF8StringEncoding];

...并为您的子任务设置当前工作目录,请使用 [NSTask setCurrentDirectoryPath:]

例如

[task setCurrentDirectoryPath: @"/blah/blah"];
[task setLaunchPath: @"/blah/blah/server.sh"];

.... (other setup code)

[task launch];
于 2010-07-10T09:37:47.717 回答
1

还有 AMShellWrapper 示例代码,它改进了 Moriarity。

http://www.harmless.de/cocoa-code.php

于 2010-08-17T11:44:09.507 回答