のNSNotificationを設定しましたNSFileHandleReadCompletionNotification
。
2本の別々のパイプで標準I/Oをセットアップしました。
NSPipe * input = NSPipe.new;
NSPipe * output = NSPipe.new;
[serverTask setStandardInput:input];
[serverTask setStandardOutput:output];
Java jarを実行するNSTaskを起動し、データの読み取りを開始します。
[[serverTask.standardOutput fileHandleForReading] readInBackgroundAndNotify];
そして、私は継続的にデータを読み取り、NSTextView
それが新しいデータである場合はデータを追加します。
- (void)serverLogHasChanged:(NSNotification *)notification
{
[[serverTask.standardOutput fileHandleForReading] readInBackgroundAndNotify];
NSData * newData = [notification.userInfo objectForKey:NSFileHandleNotificationDataItem];
if (newData != nil && availableData != newData)
{
NSMutableString * serverLogString = [NSMutableString stringWithString:serverLog.string];
[serverLogString appendString:[NSString.alloc initWithData:newData encoding:NSUTF8StringEncoding]];
[serverLog setString:serverLogString];
[serverLog.enclosingScrollView.contentView scrollPoint:NSMakePoint(0, NSMaxY(serverLog.enclosingScrollView.contentView.bounds))];
}
newData = availableData;
}
しかし、私は奇妙な出力を取得していますNSTextView
これらの「>」文字は実際の出力の行である必要がありますが、代わりに出力はXcodeのコンソールに表示されます。
言い換えると、コンソールは、出力NSPipe
の新しい行の表示のみを出力するmyではなく、出力を出力します。