0

示例:我有一个复杂的方法可以做很多事情,最后我想用 NSLog 打印一个报告。NSLog 需要一个字符串,然后是任意数量的参数。因此,可以说有这些可能的值可以记录:

一种

C

D

F

可能会发生 - 例如 - 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 回答