0

例: 多くの処理を行う複雑なメソッドがあり、最後に NSLog を使用してレポートを印刷したいと考えています。NSLog は、文字列と任意の数の引数を必要とします。したがって、ログに記録できるこれらの可能な値があるとしましょう。

B

D

たとえば、C と D はログに記録されず、残りはすべてログに記録されることがあります。NSLog の値の引数を表す動的なものを構築するにはどうすればよいですか?

この質問に NSLog を選択したのは、NSPredicate と SUBQUERY の方が簡単だからです。NSMutableString と appendFormat:... を使用しているときに、NSPredicate フォーマット文字列を動的に構築することは不可能に思えます。常に述語のコンパイル エラーが発生します。NSPredicate は、提供されたフォーマット値で NSMutableString -appendFormat とは異なることをしていると思います。

したがって、NSPredicate に 1) 動的に作成された巨大な書式文字列 2) 動的に作成された巨大な引数の「リスト」を供給する方法があったとします。

それはクールだろう。

4

3 に答える 3

3

このようなことを行う必要があります。条件付きで文字列にパーツを追加します。

NSMutableString* logMsg = [NSMutableString stringWithFormat:@"%@ %@ %@", A, B, C];

if (C) [logMsg appendFormat:@" %@", C];
if (D) [logMsg appendFormat:@" %@", D];

[logMsg appendFormat:@" %@ %@", E, F];

NSLog(@"%@", logMsg);
于 2010-06-19T20:51:44.347 に答える
1

あなたの根本的な問題は問題ではないはずです。を使用するだけ+predicateWithFormat:argumentArray:です。これを構築する上でどのような問題がありますか?

于 2010-06-20T03:26:38.480 に答える
1

一度に出力される文字列の変数リストを収集する場合は、NSMutableArray必要に応じてログ出力の行を追加するだけです。次に、プロセスの最後に、コンポーネントを文字列で結合します。

NSMutableArray *logLines = [[NSMutable alloc] initWithCapacity:10];
...
NSLog(@"Multiple-line output:\n%@",[logLines componentsJoinedByString:@"\n"]);
[logLines release];
于 2010-06-20T03:33:18.770 に答える