30

recursiveDescriptionビューの階層をデバッグするときに非常に便利です。ビューコントローラの階層も非常に重要ですが、これに相当するものはありますか?

4

4 に答える 4

43

答えを簡潔に言うと、Xcodeのデバッガコンソールで以下のコマンドを使用して、ViewController階層を出力します。

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")
于 2015-12-01T12:33:46.120 に答える
18

更新-同様の機能が_printHierarchyメソッドとしてApple提供の形式で利用できるようになったため、このカテゴリはもう必要ありません。

今あります:

Github:ビューコントローラーの再帰的な説明カテゴリ

これにより、ViewController階層を出力するrecursiveDescriptionメソッドが追加されます。UIViewController子ViewControllerを適切に追加および削除しているかどうかを確認するのに最適です。

コードは非常に単純で、ここと上記の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
于 2013-01-07T10:07:05.907 に答える
10

最速の方法(lldb / Xcodeデバッガー内):

po [UIViewController _printHierarchy]
于 2016-06-22T19:08:47.273 に答える
0

_printHierarchyは、VCのビューのサブビューコンポーネントの再帰情報を提供していません。

アプローチ1: lldbコマンドを使用して、完全なビュー階層を取得します。

po [[[UIApplication sharedApplication] keyWindow] recursiveDescription]

アプローチ2: XCodeデバッガーの「DebugViewHierarchy」ボタンを使用してすべての情報を取得するための最良の方法。

ここに画像の説明を入力してください

于 2016-11-06T07:56:26.770 に答える