recursiveDescription
在調試視圖層次結構時非常有用。查看控制器的層次結構也很重要,有沒有相當於此?視圖控制器層次結構是否存在recursiveDescription方法?
回答
更新 - 類似的功能現在可在Apple提供的表格中作爲_printHierarchy
方法使用,因此您不再需要此類別。
現在有:
Github: Recursive description category for view controllers。
這增加了一個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
簡明把答案,我用命令低於Xcode的調試器控制檯打印視圖控制器層次:
po [[[UIWindow keyWindow] rootViewController] _printHierarchy]
PS這僅適用於ios8及更高版本,僅用於調試目的。
的文章鏈接,幫助我發現這和其他許多輝煌的調試技術是this
編輯1: 在斯威夫特2,你可以通過打印層次:
UIApplication.sharedApplication().keyWindow?.rootViewController?.valueForKey("_printHierarchy")
編輯2: 在Swift 3中,您可以通過以下方式打印層次結構:
UIApplication.shared.keyWindow?.rootViewController?.value(forKey: "_printHierarchy")
在Swift中:'UIApplication.sharedApplication().keyWindow?.rootViewController?.valueForKey(「_ printHierarchy」)' –
謝謝。我會將其添加到答案中。 – jarora
最快方法(在LLDB/Xcode調試):
po [UIViewController _printHierarchy]
_printHierarchy不提供用於VC的視圖的子視圖分量遞歸信息。
方法1:使用lldb命令獲取完整的視圖層次結構。
po [[[UIApplication sharedApplication] keyWindow] recursiveDescription]
方法二:利用Xcode調試「調試視圖層次」按鈕最好的辦法讓所有的信息。
嗯,這很好,但問題明確提到recursiveDescription,我正在尋找一個等效的視圖控制器層次結構。 – jrturton
- 1. 視圖控制器不在視圖層次結構中?
- 2. iPhone視圖控制器層次結構的開銷是多少?
- 3. 從層次結構中刪除先前的視圖控制器
- 4. ZBarReaderViewController,視圖控制器層次結構和其他
- 5. 導航模式視圖控制器和導航控制器的層次結構
- 6. 將視圖控制器添加到視圖層次結構的正確方法是什麼?
- 7. 如何從任何其他視圖控制器獲取視圖控制器的詳細視圖層次結構?
- 8. 如何打印特定視圖控制器的視圖層次結構?
- 9. 如何從視圖層次結構中刪除視圖控制器?
- 10. android - 什麼是視圖層次結構?
- 11. 我如何限制導航控制器層次結構中iOS7中的每個視圖控制器的方向
- 12. 控制不能在層次結構
- 13. NSToolbar和視圖控制器層次
- 14. 添加模式視圖控制器到父子視圖控制器層次結構
- 15. viewDidLoad在視圖控制器層次結構中彈出時調用嗎?
- 16. 如何在視圖控制器層次結構中正確設置interfaceOrientation屬性?
- 17. 稍後在導航控制器的層次結構中抓取視圖
- 18. ImagePicker在視圖層次結構問題
- 19. 根視圖控制器在窗口層次視圖不
- 20. 有什麼辦法來知道UITextField是否在視圖的層次結構中?
- 21. 試圖瞭解視圖層次結構
- 22. iPhone照片應用程序的視圖控制器結構/層次結構是什麼?
- 23. 在xcode5的視圖控制器層次結構之外的界面生成器中顯示視圖
- 24. 使用相同的控制器方法處理命令對象層次結構
- 25. 如何從最後一個視圖移動到視圖控制器層次結構中的任何視圖
- 26. 渲染不在視圖層次結構中的UIView圖層
- 27. NSView - 獲取超視圖層次結構
- 28. 重置視圖層次結構iOS
- 29. 設置內容視圖層次結構
- 30. 旋轉視圖層次結構90度
+1.5發揮得好,先生。 – Caleb