2012-12-01 6 views
0

J'essaie de construire un Gui pour homebrew sur mac, avec objectif-c, mais quand j'essaie de voir les paquets installés avec le code suivant, il retourne vide, mais si je essayez une autre commande comme mise à jour ça me donne le résultat, j'ai essayé la même chose avec java et la même erreur se produit.Nouveau projet homebrew Gui mac os, apprentissage objectif-c

Git page: n'hésitez pas à aider le projet, le code pourrait avoir beaucoup d'erreurs Je suis nouveau à l'objectif-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); 

Répondre

0

C'est un projet intéressant; Bien pour vous! Homebrew fonctionne très bien sur mon Mac. Je ne vois rien de mal avec votre code. J'ai collé votre code dans une routine de test sur mon iMac et cela a parfaitement fonctionné. Il a énuméré les programmes que j'avais installés avec le brassage. Un par ligne, ce à quoi je ne m'attendais pas, mais ça a marché. Pardon.

Vous pouvez également essayer ceci. Supprimer tout dans votre méthode de [task launch] à la fin, et le remplacer par ceci:

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

et qui produit les mêmes résultats que votre code sur ma machine - ça marche, j'ai peur - mais il ne prendra pas calculer le temps d'attente pour le résultat.

+0

Nous vous remercions de votre aide mais cela ne fonctionne toujours pas mais maintenant je sais qu'il n'y a pas de problème avec le code, merci encore. – Rogerp062

+0

Avez-vous deux copies d'infusion sur votre machine? Je devais, bien sûr, changer le nom du chemin dans le programme, et le mien vit dans/usr/local/bin. Il me semble que si vous aviez deux copies, taper sur une ligne de commande ramasserait le fichier/usr/local/bin, mais le programme spécifie une copie locale explicite. Peut-être qu'ils voient différents programmes installés. En tout cas, merci beaucoup pour la tique, et continuez votre bon travail! – emrys57

+0

oui c'est tout, merci beaucoup, je pensais que j'avais seulement une installation, ça marche maintenant :) – Rogerp062

Questions connexes