Существует ли метод recursiveDescription для иерархии диспетчера представлений?

recursiveDescription очень полезен при отладке иерархии представлений. Просмотр иерархии контроллеров также очень важен, есть ли эквивалент для этого?

Ответы

Ответ 1

Обновить - аналогичная функциональность теперь доступна в форме Apple в виде метода _printHierarchy, поэтому вам больше не нужна эта категория.

Теперь есть:

Github: рекурсивная категория описания для контроллеров представлений.

Это добавляет метод recursiveDescription к UIViewController, который выводит иерархию контроллера представления. Отлично подходит для проверки правильности добавления и удаления контроллеров вашего дочернего представления.

Код очень прост, включен здесь, а также ссылка GitHub выше:

@implementation UIViewController (RecursiveDescription)

-(NSString*)recursiveDescription
{
    NSMutableString *description = [NSMutableString stringWithFormat:@"\n"];
    [self addDescriptionToString:description indentLevel:0];
    return description;
}

-(void)addDescriptionToString:(NSMutableString*)string indentLevel:(NSInteger)indentLevel
{
    NSString *padding = [@"" stringByPaddingToLength:indentLevel withString:@" " startingAtIndex:0];
    [string appendString:padding];
    [string appendFormat:@"%@, %@",[self debugDescription],NSStringFromCGRect(self.view.frame)];

    for (UIViewController *childController in self.childViewControllers)
    {
        [string appendFormat:@"\n%@>",padding];
        [childController addDescriptionToString:string indentLevel:indentLevel + 1];
    }
}

@end

Ответ 2

Чтобы кратко ответить на этот вопрос, я использую приведенную ниже команду в консоли отладчика Xcode для печати иерархии диспетчера представлений:

po [[[UIWindow keyWindow] rootViewController] _printHierarchy]

P.S. Это работает только на ios8 и выше и предназначено только для целей отладки.

Ссылка на статью, которая помогла мне обнаружить это, и многие другие блестящие методы отладки this

Изменить 1: В Swift 2 вы можете напечатать иерархию с помощью:

UIApplication.sharedApplication().keyWindow?.rootViewController?.valueForKey("_‌​printHierarchy")

Изменить 2: В Swift 3 вы можете напечатать иерархию с помощью:

UIApplication.shared.keyWindow?.rootViewController?.value(forKey: "_printHierarchy")

Ответ 3

Самый быстрый метод (в отладчике lldb/Xcode):

po [UIViewController _printHierarchy]

Ответ 4

_printHierarchy не предоставляет рекурсивную информацию для компонента подвидного представления VCs.

Подход 1: Используйте команду lldb для получения полной иерархии представлений.

po [[[UIApplication sharedApplication] keyWindow] recursiveDescription]

Подход 2: Лучший способ получить всю информацию с помощью кнопки "Отладка отображения отладки" из отладчика XCode.

введите описание изображения здесь