2013-03-04 62 views
0

我在記錄自定義對象時遇到了一些麻煩。Objective c自定義對象描述問題

爲例與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}"; 

我不明白爲什麼轉義序列不在這裏工作。 我錯過了什麼嗎?

回答

2

這是NSLog的已知行爲,它將轉義這些換行符和製表符,因此輸出保留在一行上(請參閱此SO question)。

我會說你不想在你的description輸出中輸入換行符,因爲它們不會增加任何值。

+0

感謝您的快速回復,我不知道這是一個已知的行爲。我只是認爲這會很高興有一個格式化的日誌,如記錄一個NSArray – pmk 2013-03-04 10:16:34

+0

你可能仍然可以,只是不使用'NSLog()'。 (我不會在生產代碼中使用'NSLog()',並依賴於我自己的日誌代碼)。 – trojanfoe 2013-03-04 10:19:42

+0

請問你爲什麼不使用NSLog()?我一直在使用NSLog()...這有什麼不好? – pmk 2013-03-04 10:23:27