示例:我有一个复杂的方法可以完成很多工作,最后我想用NSLog打印报告。 NSLog想要一个字符串,然后是任意数量的参数。所以我们可以说有些值可以记录下来:
A
乙
C
d
电子
˚F
可能会发生这种情况 - 例如 - C和D未被记录,但其余部分都未记录。我如何构建一个代表NSLog的值参数的动态函数?
我选择NSLog来解决这个问题,因为它可能更简单,因为它可以更简单地使用NSPredicate和SUBQUERY。在使用NSMutableString和appendFormat时,似乎不可能动态地构建NSPredicate格式字符串:...它始终导致谓词的编译错误。我猜NSPredicate使用它提供的格式值与NSMutableString -appendFormat不同。
所以如果有办法用NSPredicate提供: 1)巨大的,动态创建的格式字符串 2)一个巨大的,动态创建的参数“列表”
那会很酷。
答案 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];