iPhone用のJavaインタープリターを作成しようとしていますが、使用しているライブラリはコンソール出力をNSLog/printfコンソールに出力するだけです。NSString に変換して UITextView に表示できる std::string を返したいです。これは以前に行われたことがありますか?コンソール ログをキャプチャするか (appstore で受け入れる必要があります)、ソースを変更して、バッファーを含む文字列を返すメソッドを追加します。
質問する
142 次
1 に答える
1
C 標準入出力ライブラリーはあなたの味方です。
stderr および printf への NSLog 出力は stdout を使用することに注意してください。したがって、必要に応じて、すべての出力が必要な場合は、一方または両方のみをリダイレクトできます。
すべてのストリームをファイル (この例では stdout と sdterr の 2 つ) に書き込み、終了したらファイルを閉じると、ドキュメント ディレクトリに保存されているファイルを使用して表示できます。
// get user directory
NSArray *allPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDIR = [allPaths objectAtIndex:0];
NSString *pathForLog = [documentsDIR stringByAppendingPathComponent:@"logFile.txt"];
NSString *pathForError = [documentsDIR stringByAppendingPathComponent:@"errorFile.txt"];
// redirect the stream
freopen([pathForError cStringUsingEncoding:NSASCIIStringEncoding],"w", stderr); // NSLog
freopen([pathForLog cStringUsingEncoding:NSASCIIStringEncoding], "w", stdout); // printf
// your log stuff
printf("i am a robot\n");
NSLog(@"And i do bip bipbip biiiip");
// when you are done, close the stream
fclose (stdout);
fclose (stderr);
// and retrieve your data, as NSString object (or whatever you want)
NSString* dataLog = [NSString stringWithContentsOfFile: pathForLog
encoding: NSASCIIStringEncoding
error: nil];
NSString* errorLog = [NSString stringWithContentsOfFile: pathForError
encoding: NSASCIIStringEncoding
error: nil];
于 2013-03-22T09:54:41.013 に答える