【问题标题】:New Homebrew Gui mac os project, learning objective-c新建Homebrew Gui mac os项目,学习objective-c
【发布时间】:2012-12-01 20:28:57
【问题描述】:

我正在尝试使用 Objective-c 在 mac 上为 homebrew 构建一个 Gui,但是当我尝试使用以下代码查看已安装的软件包时,它返回空,但如果我尝试其他命令(如 update)它会给我结果,我用java尝试了同样的方法,出现了同样的错误。

Git page: 随时帮助项目,代码可能有很多错误我是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);

【问题讨论】:

    标签: objective-c macos user-interface homebrew


    【解决方案1】:

    这是一个有趣的项目;对你有益! 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];
    

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

    【讨论】:

    • 感谢您的帮助,但它仍然无法正常工作,但现在我知道代码没有问题,再次感谢您。
    • 您的机器上有两个 brew 副本吗?当然,我必须更改程序中的路径名,而我的位于 /usr/local/bin 中。令我震惊的是,如果您有两个副本,在命令行键入会选择 /usr/local/bin 一个,但程序指定了一个明确的本地副本。也许他们看到不同的安装程序。无论如何,非常感谢您的支持,继续努力!
    • 是的,就是这样,非常感谢,我以为我只安装了一个,现在可以了 :)
    猜你喜欢
    • 2011-02-02
    • 1970-01-01
    • 2010-10-25
    • 2011-05-23
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    相关资源
    最近更新 更多