【问题标题】:Objective c Custom Object Description IssueObjective c 自定义对象描述问题
【发布时间】:2013-03-04 10:02:18
【问题描述】:

我在记录自定义对象时遇到了一些问题。

一个 DateObject 类的例子:

标题

@interface DateObject : NSObject {

    NSString *month;
    NSString *day;
    NSString *year;
}
@property (nonatomic, retain)NSString *month;
@property (nonatomic, retain)NSString *day;
@property (nonatomic, retain)NSString *year;
- (NSString *)description;

实施:

#import "DateObject.h"

@implementation DateObject
@synthesize month, day, year;

- (NSString *)description{
    NSString *result = [NSString stringWithFormat:@"{\n\tMonth:\t%@\n\tDay:\t%@\n\tYear:\t%@\n}",self.month, self.day, self.year];
    return result;
}

@end

现在我像这样设置值:

DateObject *date = [[[DateObject alloc] init] autorelease];
date.month       = @"Mar";
date.day         = @"04";
date.year        = @"2013";

用这个记录对象

NSLog(@"{\n\tMonth:\t%@\n\tDay:\t%@\n\tYear:\t%@\n}",date.month, date.day, date.year);

结果(如预期)

2013-03-04 10:42:08.821 LoggingCustomObjectsExample[4389:c07] {
    Month:  Mar
    Day:    04
    Year:   2013
}

现在尝试用

记录对象
NSLog(@"%@", date);

我希望我的 description 方法会被调用(它实际上会被调用),但结果总是未格式化:

2013-03-04 10:59:18.835 LoggingCustomObjectsExample[4389:c07] DateObject: "{\n\tMonth:\tMar\n\tDay:\t04\n\tYear:2013}";

我不明白为什么转义序列在这里不起作用。 我错过了什么吗?

【问题讨论】:

    标签: ios logging nsstring formatting custom-object


    【解决方案1】:

    这是NSLog 的已知行为,它转义了那些换行符和制表符,因此输出保持在一行(参见SO question)。

    我会说无论如何你都不希望在description 输出中出现换行符,因为它们没有任何价值。

    【讨论】:

    • 感谢您的快速回复,我不知道这是一种已知行为。我只是认为有一个格式化的日志会很好,比如记录一个 NSArray
    • 你可能仍然可以,只是不使用NSLog()。 (无论如何,我不会在生产代码中使用NSLog(),而是依赖我自己的日志记录代码)。
    • 请问您为什么不使用 NSLog()?我一直在使用 NSLog()... 这有什么不好吗?
    • 我不使用NSLog(),因为我将日志记录数据写入文件,因此我可以选择将它们上传到某个地方或让用户将它们发送给我以进行事后调试。我的日志记录代码还提供了带有运行时支持的日志记录级别,以关闭详细的调试级别消息,这些消息通常只在开发期间对我有用。
    • 我明白了。感谢您的回复!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 2017-02-09
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多