如何动态建立NSLog的参数?

时间:2010-06-19 19:58:27

标签: iphone objective-c cocoa-touch nspredicate nslog

示例:我有一个复杂的方法可以完成很多工作,最后我想用NSLog打印报告。 NSLog想要一个字符串,然后是任意数量的参数。所以我们可以说有些值可以记录下来:

A

C

d

电子

˚F

可能会发生这种情况 - 例如 - C和D未被记录,但其余部分都未记录。我如何构建一个代表NSLog的值参数的动态函数?

我选择NSLog来解决这个问题,因为它可能更简单,因为它可以更简单地使用NSPredicate和SUBQUERY。在使用NSMutableString和appendFormat时,似乎不可能动态地构建NSPredicate格式字符串:...它始终导致谓词的编译错误。我猜NSPredicate使用它提供的格式值与NSMutableString -appendFormat不同。

所以如果有办法用NSPredicate提供: 1)巨大的,动态创建的格式字符串 2)一个巨大的,动态创建的参数“列表”

那会很酷。

3 个答案:

答案 0 :(得分:2)

这样的事情应该这样做,有条件地将部分附加到字符串:

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

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

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

NSLog(@"%@", logMsg);

答案 1 :(得分:1)

您的潜在问题应该不是问题。只需使用+predicateWithFormat:argumentArray:即可。你在构建这个问题时遇到了什么问题?

答案 2 :(得分:1)

如果您正在收集要一次输出的变量字符串列表,只需使用NSMutableArray根据需要添加一行日志输出。然后在该过程结束时,使用字符串来连接组件:

NSMutableArray *logLines = [[NSMutable alloc] initWithCapacity:10];
...
NSLog(@"Multiple-line output:\n%@",[logLines componentsJoinedByString:@"\n"]);
[logLines release];