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.