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

标签 objective-c xcode user-interface nstask

有人可以展示一个简单的例子来说明如何结合使用 NSTask 和 NSPipe 来做到这一点:

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

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

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

谢谢!

以利亚

最佳答案

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];

关于objective-c - NSTask 和 NSPipe 示例与命令行 objective-c 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3208696/

相关文章:

objective-c - 我可以将 dispatch_once_t 谓词声明为成员变量而不是静态的吗?

ios - 将 xcode 更新到 7.2 后,我的应用程序无法连接到 Web 服务

c++ - UI 菜单开发资源

java - NetBeans 8 中的远程调试 GUI Java 应用程序 (swing)

java - 在 JPanel 上绘制椭圆时遇到问题

ios - 如何在 UIImagePickerController 中禁用后/前摄像头切换选项?

ios - UIView 线性动画移动 View

ios - main 方法和 block 中的内存泄漏

iphone - 从 UIViewController 方法更改 UIWindow 的呈现 View

cocoa - Xcode : Garbage Collector Setting