0

私のプログラムでは、現在 NSTask を 5 回使用していますが、すべてうまく機能しますが、非常に似ているコードを何度も繰り返さなければならないことにうんざりしているので、関数に入れてみました。残念ながら、次の行でクラッシュが発生します: [task launch]. それ以外は、関数の外でこのコードを使用しているかのように、クラッシュの原因を特定できません。完全に機能します。

私が使用している方法は次のとおりです。

- (NSString *)performTask: (NSString *)launchPath: (NSString *)argument1: (NSString *)argument2: (NSString *)argument3: (NSString *)argument4: (NSString *)argument5
{
    NSString *resPath = [[NSBundle mainBundle] resourcePath];
    NSTask *task = [[NSTask alloc] init];
    [task setLaunchPath: [NSString stringWithFormat: launchPath, resPath]];
    NSArray *arguments = [NSArray arrayWithObjects: argument1, argument2, argument3, argument4, argument5, nil];
    [task setArguments: arguments];
    NSPipe *pipe = [NSPipe pipe];
    [task setStandardInput:[NSPipe pipe]];
    [task setStandardOutput: pipe];
    NSFileHandle *file = [pipe fileHandleForReading];
    [task launch];
    NSData *data = [file readDataToEndOfFile];
    NSString *status = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
    return status;
}

これが修正されることを本当に願っていますが、なぜこれがクラッシュするのか本当にわかりません。

よろしくお願いします。

4

1 に答える 1

0

これをチェックしてください。私はそれを使用しています。

https://gist.github.com/1875386

arrayWithObjects: for NSTask を使用するよりもはるかに簡単です...

ラジコン

于 2012-06-24T11:03:52.257 に答える