Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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.

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