0

我正在尝试使用objective-c在mac上为自制软件构建一个Gui,但是当我尝试使用以下代码查看已安装的软件包时,它返回空但是如果我尝试其他命令(如更新)它会给我结果,我尝试了与java相同并且发生相同的错误。

Git页面:随意帮助项目,代码可能有很多错误我是 Objective-c 的新手。

NSTask *task;
task=[[NSTask alloc]init];
[task setLaunchPath:@"/Users/rogeriop062/homebrew/bin/brew"];

NSArray *arguments;
arguments = [NSArray arrayWithObjects:@"list",nil];
[task setArguments: arguments];

NSPipe *pipe;
pipe =[NSPipe pipe];
[task setStandardOutput:pipe];


NSFileHandle *file;
file=[pipe fileHandleForReading];

[task launch];


NSMutableData *data=[NSMutableData dataWithCapacity:1000];

while ([task isRunning]) {

    [data appendData:[file readDataToEndOfFile]];
}
[data appendData:[file readDataToEndOfFile]];


NSString *string;
string =[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"result: %@\n",string);
4

1 回答 1

0

这是一个有趣的项目;对你有益!Homebrew 在我的 Mac 上运行得非常好。我看不出你的代码有什么问题。我将您的代码粘贴到我的 iMac 上的测试例程中,它运行良好。它列出了我用 brew 安装的程序。每行一个,我没想到,但它起作用了。对不起。

你也可以试试这个。从头到尾删除方法中的所有内容[task launch],并将其替换为:

task.terminationHandler = ^(NSTask *blockTask) {
    NSMutableData *data=[NSMutableData dataWithCapacity:1000];
    [data appendData:[file readDataToEndOfFile]];
    NSString * string =[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"result: %@\n",string);
};
[task launch];

这会产生与您在我的机器上的代码相同的结果 - 恐怕它可以工作 - 但它不会花费计算时间来等待结果。

于 2012-12-01T21:04:48.190 回答