2013-01-07 10 views
21

recursiveDescription विचारों के पदानुक्रम को डीबग करते समय बहुत उपयोगी है। देखें नियंत्रक पदानुक्रम भी बहुत महत्वपूर्ण हैं, क्या इसके लिए समकक्ष है?क्या दृश्य नियंत्रक पदानुक्रम के लिए एक पुनरावर्ती डिस्क्रिप्शन विधि है?

उत्तर

17

अद्यतन - इसी तरह की कार्यक्षमता अब ऐप्पल-आपूर्ति फॉर्म में _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 
+1

+1.5 अच्छी तरह से खेला, महोदय। – Caleb

23

concisely जवाब में कहें, मैं Xcode के डिबगर कंसोल में नीचे आदेश का उपयोग दृश्य नियंत्रक पदानुक्रम मुद्रित करने के लिए:

po [[[UIWindow keyWindow] rootViewController] _printHierarchy] 

पीएस यह केवल ios8 और ऊपर काम करता है और केवल डीबगिंग उद्देश्यों के लिए है। लेख मुझे यह और कई अन्य प्रतिभाशाली डिबगिंग तकनीक की खोज में मदद की है कि करने के लिए

लिंक है this

संपादित करें 1: स्विफ्ट 2 में आप द्वारा पदानुक्रम मुद्रित कर सकते हैं:

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

संपादित करें 2: स्विफ्ट 3 में आप पदानुक्रम प्रिंट कर सकते हैं:

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

स्विफ्ट में: 'UIAplplication.sharedAplication()। KeyWindow? .rootViewController? .valueForKey ("_ printHierarchy") ' –

+0

धन्यवाद। मैं इसे उत्तर में जोड़ दूंगा। – jarora

5

सबसे तेजी से विधि (lldb/Xcode डिबगर में):

po [UIViewController _printHierarchy] 
0

_printHierarchy कुलपति देखने के उप दृश्य घटक के लिए पुनरावर्ती जानकारी प्रदान नहीं कर रहा है।

दृष्टिकोण 1: पूर्ण दृश्य पदानुक्रम प्राप्त करने के लिए lldb कमांड का उपयोग करें।

po [[[UIApplication sharedApplication] keyWindow] recursiveDescription] 

दृष्टिकोण 2: सबसे अच्छा तरीका है XCode डिबगर से "डीबग देखें पदानुक्रम" बटन का उपयोग सभी जानकारी प्राप्त करने के लिए।

enter image description here

+0

एर्म, यह अच्छा है, लेकिन सवाल विशेष रूप से रिकर्सिव वर्णन का उल्लेख करता है और मैं दृश्य नियंत्रक पदानुक्रम के लिए समकक्ष की तलाश में हूं। – jrturton