2013-01-07 6 views

risposta

17

Aggiornamento - una funzionalità simile è ora disponibile in formato Apple come metodo _printHierarchy, quindi non è più necessaria questa categoria.

ora c'è:

Github: Recursive description category for view controllers.

Aggiunge un metodo recursiveDescription a UIViewController che stampa la gerarchia del controller di visualizzazione. Eccellente per verificare se si stanno aggiungendo e rimuovendo correttamente i controller di visualizzazione figlio.

il codice è molto semplice, incluso anche qui, come il link GitHub sopra:

@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 Ben giocato, signore. – Caleb

23

per mettere la risposta in modo conciso, io uso il seguente comando nella console di debug di Xcode per stampare la gerarchia View Controller:

po [[[UIWindow keyWindow] rootViewController] _printHierarchy] 

PS Funziona solo su ios8 e successivi ed è pensato solo per scopi di debug.

Link all'articolo che mi ha aiutato a scoprire questo e molte altre tecniche di debug brillanti è this

Edit 1: In Swift 2 è possibile stampare la gerarchia da:

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

Edit 2: In Swift 3 è possibile stampare la gerarchia di:

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

In Swift: 'UIApplication.sharedApplication(). KeyWindow? .rootViewController? .valueForKey (" _ printHierarchy ")' –

+0

Grazie. Lo aggiungerò alla risposta. – jarora

5

metodo più veloce (in lldb debugger/Xcode):

po [UIViewController _printHierarchy] 
0

_printHierarchy non fornisce informazioni ricorsivo per la vista sub componente di vista di VC.

Metodo 1: Utilizzare il comando lldb per ottenere la gerarchia di visualizzazione completa.

po [[[UIApplication sharedApplication] keyWindow] recursiveDescription] 

Approccio 2: modo migliore per ottenere tutte le informazioni utilizzando il pulsante “Debug View gerarchia” dal debugger XCode.

enter image description here

+0

Ehm, è carino, ma la domanda menziona recursiveDescription e sto cercando un equivalente per la gerarchia del controller di visualizzazione. – jrturton

Problemi correlati