Заменить метод отображения массива? - PullRequest
3 голосов
/ 05 января 2010

Мне любопытно, как я могу переопределить метод описания, который используется, когда вы делаете следующее (см. Ниже) для объекта. Я в основном хочу лучше отформатировать вывод, но не уверен, как мне это настроить.

NSLog(@"ARRAY: %@", myArray);

большое спасибо

EDIT_001

Хотя подклассы NSArray работали бы, я решил, что добавлю категорию в NSArray (не использовав ее раньше). Вот что я добавил ...

// ------------------------------------------------------------------- **
// CATAGORY: NSArray
// ------------------------------------------------------------------- **
@interface NSArray (displayNSArray)
    -(NSString*)display;
@end

@implementation NSArray (displayNSArray)
-(NSString*)display {
    id eachIndex;
    NSMutableString *outString = [[[NSMutableString alloc] init] autorelease];
    [outString appendString:@"("];
    for(eachIndex in self) {
        [outString appendString:[eachIndex description]];
        [outString appendString:@" "];
    }
    [outString insertString:@")" atIndex:[outString length]-1];
    return(outString);
}
@end

1011 * Гэри *

Ответы [ 3 ]

2 голосов
/ 05 января 2010

Я предполагаю, что ваша переменная myArray является экземпляром класса NSArray / NSMutableArray.

Когда NSLog () встречает символ @ в строке формата, он вызывает метод -description: для объекта. Это метод корневого класса, NSObject, от которого наследуются все другие классы Какао. -description: возвращает строку NSString, позволяющую любому объекту, который реализует этот метод, быть переданным в NSLog (@ "@", anyObject) и иметь красиво отформатированный вывод. Возвращаемая строка может быть чем угодно, что вы хотите построить.

Для вашей конкретной проблемы вы можете создать подкласс NSMutableArray и переопределить метод -description: в своей собственной реализации. Затем используйте ваш подкласс вместо NSMutableArray.

Для получения дополнительной информации о NSObject и -описании: см. Документы Apple .

2 голосов
/ 05 января 2010

Если вы делаете это много, самый простой способ переформатировать отображение вашего массива - добавить новую категорию prettyPrint в класс NSArray.

@interface NSArray ( PrettyPrintNSArray )
- (NSSTring *)prettyPrint;
@end

@implementation NSArray ( PrettyPrintNSArray )
- (NSString *)prettyPrint {
    NSMutableString *outputString = [[NSMutableString alloc] init];
    for( id item in self ) {
        [outputString appendString:[item description]];
    }
    return outputString;
}
@end

Очевидно, что вам нужно изменить цикл for, чтобы получить форматирование так, как вы хотите.

1 голос
/ 05 января 2010

С Форматирование строковых объектов :

NSString поддерживает символы формата, определенные для функции ANSI C printprintf (), плюс "@" для любого объекта. Если объект отвечает на сообщение descriptionWithLocale :, NSString отправляет это сообщение для получения текстового представления, в противном случае отправляет сообщение описания.

Таким образом, чтобы настроить преобразование массива в строку, вы должны изменить NSArray descriptionWithLocale: реализация. Вот пример того, как вы можете заменить метод объекта во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...