recursiveDescription
è molto utile durante il debug di una gerarchia di viste. Visualizza le gerarchie controller sono anche molto importanti, c'è un equivalente per questo?Esiste un metodo recursiveDescription per la gerarchia del controller di visualizzazione?
risposta
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
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")
In Swift: 'UIApplication.sharedApplication(). KeyWindow? .rootViewController? .valueForKey (" _ printHierarchy ")' –
Grazie. Lo aggiungerò alla risposta. – jarora
metodo più veloce (in lldb debugger/Xcode):
po [UIViewController _printHierarchy]
_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.
Ehm, è carino, ma la domanda menziona recursiveDescription e sto cercando un equivalente per la gerarchia del controller di visualizzazione. – jrturton
+1,5 Ben giocato, signore. – Caleb