2012-03-03 15 views
2

私はこのようなエラー処理コードしている:NSLogのバッファをどのようにフラッシュするのですか?

if (ERROR) { 
    NSLog(@"<some message>"); 
    exit(-1); 
} 

のNSLogで記録されたメッセージは、必ず出口は()のNSLogのバッファをフラッシュすることなく処理を終了し、おそらくので、コンソールには表示されません。どのようにNSLogのバッファを自分でフラッシュできますか?

+0

ただ、ブラインドの推測では、 'にfflush(stdoutが)'ちょうどあなたの前に 'exit'? – ayoy

+2

NSLogがstderrにプリントすると思います... – fbernardo

答えて

4

次のことを試してみてください。

if (ERROR) { 
    NSLog(@"<some message>"); 
    fflush(stderr); 
    exit(-1); 
} 

しかしApple Human Interface Guidelinesは明らかにそれを言うので、あなたは、生産コードでexitを使用しないでください:人々はこれを解釈する傾向があるので、

は、プログラム iOSアプリケーションを終了することはありませんクラッシュとしてただし、外部の状況によってアプリケーションが意図したとおりに機能しない場合は、状況をユーザーに伝え、ユーザーが状況について何ができるかを説明する必要があります。アプリケーションの誤動作の程度によっては、2つの選択肢があります。

+1

彼はfflushを使うことができます。彼が使うことができないものはexit()関数です。 – fbernardo

+0

+1 for Apple HIG – edo42

+0

fflushはバッファリングされたデータ用です。 stderrはデータをバッファしません。 – xaxxon

1

はこのことを考えてみますが、どのようにについて

[someMessage writeToFile:@"/dev/stderr" atomically:NO 
     encoding:NSASCIIStringEncoding error:nil]; 
+0

アトミックにNOの代わりにYESを送信しない限り、おそらく同じ問題が発生します。今でもテストすることはできません... – fbernardo

関連する問題