0

iPhone用のJavaインタープリターを作成しようとしていますが、使用しているライブラリはコンソール出力をNSLog/printfコンソールに出力するだけです。NSString に変換して UITextView に表示できる std::string を返したいです。これは以前に行われたことがありますか?コンソール ログをキャプチャするか (appstore で受け入れる必要があります)、ソースを変更して、バッファーを含む文字列を返すメソッドを追加します。

4

1 に答える 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 に答える