NSTask和NSPipe示例与命令行objective-c通信

时间:2010-07-08 23:10:32

标签: objective-c xcode user-interface nstask

有人可以快速举例说明如何结合使用NSTask和NSPipe来实现这一目标:

Charlie AI - 通过终端与AI进行交流

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

我可以处理GUI内容(NSTextField等)但我需要有关objective-c编码部分的帮助。

谢谢!

利亚

2 个答案:

答案 0 :(得分:4)

Apple提供了一些很好的示例代码,展示了如何完成大部分工作... http://developer.apple.com/mac/library/samplecode/Moriarity/

TaskWrapper.m 包含所有聪明的东西,但由于您希望能够将数据发送到任务,您需要将其扩展一点,如下所示:

[task setStandardInput: [NSPipe pipe]];

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

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

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

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

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

e.g。

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

.... (other setup code)

[task launch];

答案 1 :(得分:1)

还有一个AMShellWrapper示例代码可以改善生活方式。

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