С моими собственными классами я обычно переопределяю метод описания (NSString *), чтобы облегчить отладку. Однако при вызове описания в классе, который я реализовал, который вызывает метод рекурсивного описания из моих других классов, все символы форматирования из «более глубоких» классов экранируются. Это затрудняет реализацию любой довольно сложной печати. Вот пример, чтобы сделать его более ясным:Правильная реализация метода описания NSObject для вложенных классов, содержащих коллекции
@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 получит убежали на выходе класса А метод описания. Любая идея, как избавиться от этого поведения или обойти его? Это особенно раздражает при печати вложенных классов, которые содержат коллекции.
Если я возьму вашу реализацию, сделав barArray a Bar *, а затем вызовет объект print на объекте Foo, строка новой строки будет правильно напечатана, а не экранирована. Где именно ваша проблема? – 2010-12-02 16:00:59
если вместо массива Bar у вас будет один элемент Bar *, который вы правы, все будет напечатано правильно. Однако с массивом кажется, что метод описания для массива, избегает строк, возвращаемых из описания вызова на элементах массива – maciejs 2010-12-02 16:36:44