2012-12-01 63 views
0

我想在mac上使用objective-c爲自制軟件創建一個Gui,但是當我嘗試用下面的代碼看到已安裝的軟件包時,它將返回空,但是如果我嘗試其他命令,如更新它給了我結果,我嘗試了與java一樣的同樣的錯誤發生。新的自制軟件Gui mac os項目,學習目標-c

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

回答

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

,併產生相同的結果我的機器上的代碼 - 它的作品,我怕 - 但它不會採取計算等待結果的時間。

+0

謝謝你的幫助,但它仍然不起作用,但現在我知道代碼沒有問題,再次謝謝你。 – Rogerp062

+0

您的機器上是否有兩份沖泡啤酒?當然,我已經改變了程序中的路徑名稱,並將其存放在/ usr/local/bin中。如果你有兩個副本,在命令行鍵入將會選擇/ usr/local/bin,但是程序指定了一個明確的本地副本。也許他們看到不同的安裝程序。無論如何,非常感謝剔,並保持良好的工作! – emrys57

+0

是的,它,非常感謝你,我以爲我只有一個安裝,它現在的作品:) – Rogerp062