0

カスタムオブジェクトのログ記録に問題があります。

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}";

ここでエスケープシーケンスが機能しない理由がわかりません。私は何かが足りないのですか?

4

1 に答える 1

2

これは の既知の動作でNSLogあり、これらの改行文字とタブ文字をエスケープしているため、出力は 1 行のままになります (このSO の質問を参照してください)。

descriptionいずれにせよ、改行文字は値を追加しないため、出力に改行文字を入れたくないと言います。

于 2013-03-04T10:07:37.103 に答える