0

コマンド「kick」を使用して起動しようとしているスタンドアロン (サードパーティ) アプリがあります。~/.bash_profile ファイルと /etc/bashrc ファイルをセットアップして、ターミナル ウィンドウに kick [command] と入力すると、完全に機能するようになりました。したがって、すべてが正しくセットアップされていると想定しています。

問題は、NSTask を使用しようとすると発生します。

基本的に、私がやっていることは、kickBuild と kickOut という 2 つの可変配列を作成することです。1 つはコマンド (フラグの文字列) を組み立てるためのもので、もう 1 つは NSTask で使用するためのものです。kickBuild をスペースで区切られた文字列に変換し、それをオブジェクトとして 2 番目の配列に追加します。

したがって、私のコマンドは「kick -i /path/to/input/file.ext -as 2 -g 2.2」などのようになります。これを端末ウィンドウに入力すると、うまく機能します。

kickBuild = [[NSMutableArray alloc] initWithCapacity:100];
kickOut = [[NSMutableArray alloc] initWithCapacity:2]; // Thinking that this should be "kick" and then "-i /path/to/input/file.ext -as 2 -g 2.2"
kickPath = [kickLocationTextField stringValue]; // This is just the path to my kick executable. NOT /bin/sh. Is that correct?
NSString *tempKick = [kickBuild componentsJoinedByString: @" "];
[kickOut addObject:tempKick];
[NSTask launchedTaskWithLaunchPath:kickPath arguments:kickOut];

アプリをビルドしてこのコードを実行すると、このエラーが発生します…</p>

dyld: ライブラリがロードされていません: build/darwin_x86_64/gcc_opt_dynamic/core/libai.dylib

参照元: /Users/Gene/Kick/Kick-3.3.4.0/bin/kick

理由: 画像が見つかりません

これは kickOut の NSLog です… kick -i /Users/Gene/Test_Main.0001.ext -r 960 540 -as 2 -g 2.2 -v 5 -dp

これは私が間違っていることですか?それともキックの問題?

NSTask を正しく使用していることを確認するために、基本的な端末タスクで NSTask をテストするにはどうすればよいですか?

kickBuild = [[NSMutableArray alloc] initWithCapacity:5];
kickOut = [[NSMutableArray alloc] initWithCapacity:2];
kickPath = @"/bin/sh";
[kickBuild addObject:@"-c"]; // Do I need this?
[kickBuild addObject:@"ls"];
[kickBuild addObject:@"~/Desktop"];
NSString *tempKick = [kickBuild componentsJoinedByString: @" "];
[kickOut addObject:tempKick];
[NSTask launchedTaskWithLaunchPath:kickPath arguments:kickOut];

@"-c" なしでこれを実行すると、次のようになります: /bin/sh: ls ~/Desktop: No such file or directory

どんな助けでも大歓迎です。

どうもありがとう

4

2 に答える 2

1

NSTask の実行時に、環境設定が読み込まれません。

私は数年前にこの質問をしました。

于 2011-02-22T18:00:13.500 に答える
1

これはあなたのために働くべき簡単なNSTaskテストです(注:arguments:(NSArray *)arguments):

/*

gcc -Wall -O3 -x objective-c -fobjc-exceptions -framework Foundation -o nstask nstask.m

./nstask

http://stackoverflow.com/questions/5081846/trying-to-run-nstask-but-getting-an-error


launchedTaskWithLaunchPath:arguments:

Creates and launches a task with a specified executable and arguments.

+ (NSTask *)launchedTaskWithLaunchPath:(NSString *)path arguments:(NSArray *)arguments


*/

#import <Foundation/Foundation.h>

int main(int argc, const char *argv[])
{

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

NSTask *task = [NSTask new];

NSMutableArray *kickBuild = [[NSMutableArray alloc] initWithCapacity:5];
//NSMutableArray *kickOut = [[NSMutableArray alloc] initWithCapacity:2];
NSString *kickPath = @"/bin/ls";

//[kickBuild addObject:@"/bin/ls"]; // Do I need this?
[kickBuild addObject: [@"~/Desktop" stringByExpandingTildeInPath]];

task = [NSTask launchedTaskWithLaunchPath: kickPath arguments: kickBuild];
[task waitUntilExit];


[pool release];

return 0;

}
于 2011-02-28T12:54:13.000 に答える