使用我自己的类,我通常会覆盖 - (NSString *)描述方法来简化调试。 但是,当我调用我实现的类的描述时,从我的其他类中调用递归描述方法,来自“更深”类的所有格式化字符都被转义。这使得任何漂亮的打印都难以实现。 这是一个让它更清晰的例子:
@interface Foo {
NSArray *barsArray;
}
@end
@implementation Foo
- (NSString *)description {
return [NSString stringWithFormat: @"foo contents: %@", barsArray];
}
@interface Bar {
NSString *s1;
NSString *s2;
}
@implementation Bar
- (NSString *)description {
return [NSString stringWithFormat: @"s1: %@\ns2: %@", s1, s2];
}
在这种情况下,来自B类描述的\ n换行符将在A类描述方法的输出中被转义。任何想法如何摆脱或规避这种行为?打印全部包含集合的嵌套类时尤其烦人。
答案 0 :(得分:2)
您始终可以使用标准容器附带的漂亮格式。例如,您的条形描述可能是:
- (id)containerDescription {
return [NSDictionary dictionaryWithObjectsAndKeys:s1, @"s1", s2, @"s2", nil];
}
- (NSString *)description {
return [self.containerDescription description];
您现在可以在Foo上执行以下操作:
- (NSString *)description {
NSArray *desc = [barsArray valueForKey:@"containerDescription"];
NSDictionary *descriptionDictionary =
[NSDictionary dictionaryWithObjectsAndKeys:desc, @"foo contents", nil];
return [descriptionDictionary description];
}
解决方案当然不是最优的,因为你必须有第二种方法并且必须在更高级别上调用containerDescription,但它是我发现的唯一方法。
答案 1 :(得分:0)
您可以使用回车\r
,它也将以新的一行结束(即使在NSArray的描述中)。
但它不会缩进输出。在我的情况下,我刚刚添加了8个空格(\t
也将被转义),这对于普通和数组输出看起来不错,但不如对于更深层的结构那么好。