gpt4 book ai didi

objective-c - 使用 NSTask : app freezing after returning output

转载 作者:行者123 更新时间:2023-12-03 17:00:37 25 4
gpt4 key购买 nike

您好,我有以下代码:

- (IBAction)runTask:(id)sender {
NSTask *proc;
NSPipe *output;
NSData *data;
NSString *buffer;

proc = [[NSTask alloc] init];
output = [[NSPipe alloc] init];

[proc setLaunchPath:@"/bin/sh"];
[proc setArguments:[NSArray arrayWithObjects: @"-c", @"/usr/bin/otool -L /Applications/TextEdit.app/Contents/MacOS/TextEdit | /usr/bin/awk 'NR>1{print $1}' | /usr/bin/sed -e '/@executable_path/d' -e 's/(.*)$//' -e 's/\\/Versions.*$//'", nil]];
[proc launch];

data = [[output fileHandleForReading] readDataToEndOfFile];
buffer = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"got: %@", buffer);

// Release
[proc release];
[output release];
[buffer release];
[data release];
}

代码的目的有点复杂,它使用 otool 获取二进制文件使用的共享库的列表,然后使用 sed 和 awk 将其过滤为机器可读的格式。为了测试,我使用了 Mac OS X TextEdit.app 的二进制文件。

问题是代码运行并返回输出,但随后卡住了应用程序。我逐行检查了一下,发现这一行是问题所在:

数据 = [[输出 fileHandleForReading] readDataToEndOfFile];

该行本身将输出记录到控制台,然后卡住应用程序。我通过删除该行之后的所有其他行来检查这一点,它仍然记录输出并卡住。调试器中没有任何内容,任何有关如何解决此问题的建议将不胜感激。

最佳答案

您似乎缺少一个

[proc setStandardOutput:output];

关于objective-c - 使用 NSTask : app freezing after returning output,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1250123/

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