NSTask la trajectoire de lancement n'est pas accessible
Je suis en utilisant le code suivant dans mon Cacao projet à l'appel d'un script que j'ai fait. Le script est dans le même dossier que le projet et même apparaît sous la rubrique "Ressources" dans le dossier de XCode. Le bon chemin est trouvé, mais il dit encore que le chemin n'est pas accessible. De l'aide s'il vous plaît.
NSBundle *mainBundle=[NSBundle mainBundle];
NSString *path=[mainBundle pathForResource:@"script" ofType:@"sh"];
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath: path];
NSLog (path);
NSPipe *pipe = [NSPipe pipe];
[task setStandardOutput: pipe];
[task setStandardError: pipe];
NSFileHandle *file = [pipe fileHandleForReading];
[task launch];
[task waitUntilExit];
NSData *data = [ddFile readDataToEndOfFile];
NSString *output = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
HDSpeed = [f output];
[f release];
[task release];
La sortie j'obtiens dans le débogueur est:
2010-07-10 17:53:26.384 tester[5023:a0f] /Users/guest/Library/Developer/Xcode/DerivedData/tester-bhukztmqjwoqrwereagsshvtbfqx/Build/Products/Debug/tester.app/Contents/Resources/script.sh
2010-07-10 17:53:26.386 tester[5023:a0f] launch path not accessible
OriginalL'auteur hassaanm | 2010-07-11
Vous devez vous connecter pour publier un commentaire.
Ce que vous devez faire est d'obtenir le shell binaire, et passer votre script comme argument. Donc, si le shell script est écrit ciblage bash, obtenir le bash interprète, et une liste d'arguments avec un seul argument: le chemin d'accès à votre script.sh.
/bin toujours, sauf si l'utilisateur a modifié leur installation de base, ce qui semble peu probable à cet égard.
Oh merci! /bin/bash semblait fonctionner mais maintenant, le programme semble arrêter d'aller de l'avant après que la tâche a été lancé. Aucune idée à ce sujet?
que feriez-vous si le script lui-même prend comme arguments?
OriginalL'auteur jer
ajouter cette ligne avant
[task launch]
:OriginalL'auteur stifin
Cette erreur se produit lorsque le script lui-même n'est pas marqué comme exécutable. Ouvrez une fenêtre de terminal et aller là où le script est dans votre répertoire de projet, puis saisissez ceci:
Propre et construire et vous pouvez utiliser le script directement - ce qui signifie également que vous pouvez passer des arguments.
OriginalL'auteur jrturton
Quand j'ai changer le nom de mon script (stockées dans l'Application Bundle) de
foo.sh
àfoo.command
- je éviter cette erreur.La
.command
extension est ce qui est utilisé dans la Ray Wenderlich tutoriel pourNSTask
/Processus
. Je n'arrive pas à trouver ce document n'importe où (j'ai aussi assurez-vous que le script est exécutable viachmod +x foo.sh
).OriginalL'auteur wcochran
en raison de [tâche waitUntilExit];
OriginalL'auteur user549164