recursiveDescription
ビューの階層をデバッグするときに非常に便利です。ビューコントローラの階層も非常に重要ですが、これに相当するものはありますか?
10931 次
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提供の形式で利用できるようになったため、このカテゴリはもう必要ありません。
今あります:
これにより、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 に答える