NSTask コマンドの出力を監視できないようです。私の理解では、NSNotificationCenter を使用する必要があります。私が実行しようとしている端末コマンドは、さまざまな暗号化方法を使用して、セキュリティで保護されたサーバーからファイルをダウンロードします (これを object-c で書き直すのは非常に面倒です)。完了したダウンロードのパーセンテージを受け取ることができるように、結果を監視する必要があります。
これが私がこれまでに持っているものです
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
task = [[NSTask alloc] init];
pipe = [[NSPipe alloc] init];
NSDictionary *defaultEnvironment = [[NSProcessInfo processInfo] environment];
NSMutableDictionary *environment = [[NSMutableDictionary alloc] initWithDictionary:defaultEnvironment];
[environment setObject:@"YES" forKey:@"NSUnbufferedIO"];
[task setEnvironment:environment];
[task setLaunchPath:[[NSBundle mainBundle] pathForResource:@"servDecryptor" ofType:nil]];
[task setArguments:[NSArray arrayWithArray:arguments]];
[task setStandardOutput:pipe];
fh = [pipe fileHandleForReading];
[nc addObserver:self
selector:@selector(ready:)
name:NSFileHandleReadCompletionNotification
object:fh];
[nc addObserver:self
selector:@selector(decFinished:)
name:NSTaskDidTerminateNotification
object:task];
[task launch];
[fh readInBackgroundAndNotify];
と
//Ready method
[[pipe fileHandleForReading] readInBackgroundAndNotify];
NSData *d;
d = [[note userInfo] valueForKey:NSFileHandleNotificationDataItem];
if ([d length] > 0) {
NSString *s = [[NSString alloc] initWithData:d encoding:NSUTF8StringEncoding];
}
注意: ダウンロードは、2 番目の方法を使用せずに開始および進行します。ただし、ダウンロードが完了してプロセスが終了すると、アプリケーションがクラッシュします。