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

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

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

 po [[[UIWindow keyWindow] rootViewController] _printHierarchy] 

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

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

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

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

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

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

Обновление – аналогичная функциональность теперь доступна в поставляемой 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 

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

 po [UIViewController _printHierarchy] 

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

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

 po [[[UIApplication sharedApplication] keyWindow] recursiveDescription] 

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

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

  • Сложная настройка вида в UIVIew или UIViewController? (Проектное решение)
  • Как использовать inputAccessoryViewController в iOS 8
  • ios5 - размер контроллера модального просмотра с раскадрой
  • viewWillDisappear и viewDidDisappear никогда не вызываются
  • Swift - Игровой центр недоступен
  • Портретная ориентация во всех диспетчерах просмотра, кроме контроллера модального просмотра
  • Метод вызова из другого ViewController
  • Как разрешить только один UIViewController вращаться в направлении «Пейзаж» и «Портрет»?
  • SWIFT uiviewcontroller init
  • О методах viewController «viewDidLoad» и «viewWillAppear»
  • Когда именно я должен называть , а когда нет?
  • Interesting Posts

    iOS: использование @min и @max в основном предикате данных

    Как получить доступ к проходам из сберегательной книги в моем приложении?

    Иногда ячейка UITableView не обновляет изображение, но отображается после прокрутки

    Вход в систему по-прежнему недоступен

    Почему в приложении отображается UIAlertView: didFinishLaunchingWithOptions: вызывает ошибку?

    Как разобрать UTC эпоху 1352716800 на NSDate?

    Связанные объекты в Swift, действительно ли глобальный ключ создает конкретные экземпляры?

    AVAssetExportSession exportAsynchronouslyWithCompletionHandler: метод не вызывается

    iOS Quick Action Share с помощью UIActivityViewController

    Контроллеры с несколькими представлениями с базовыми данными и Restkit

    Отключить уведомление о записи звука, когда приложение находится в фоновом режиме в iOS SDK 4.2+

    HDR с AVFoundation

    IOS 8 NSLocationAlwaysUsageDescription собственный перевод

    Подсказки в iOS через собственные элементы управления пользовательским интерфейсом?

    Пытался выскочить на контроллер просмотра, которого нет

    Давайте будем гением компьютера.