Abbiamo ricevuto un progetto ENORME da esternalizzazione che stiamo cercando di "riparare". Ci sono centinaia di controller di visualizzazione all'interno del progetto. Il nostro obiettivo è quello di determinare facilmente quale classe stiamo attualmente guardando sul dispositivo.Registrazione del nome classe di tutti i UIViewControllers in un progetto
La nostra soluzione (che non ha funzionato, da qui la domanda SO) segue.
l'override del metodo viewDidAppear di UIViewController tramite una categoria con questo:
-(void)viewDidAppear:(BOOL)animated
{
NSLog(@"Current View Class: %@", NSStringFromClass(self.class));
[self viewDidAppear:animated];
//Also tried this:
//[super viewDidAppear:animated];
}
questa categoria sarebbe stato messo nel .pch del progetto.
Ciò non richiederebbe alcun codice aggiuntivo da inserire nelle centinaia di controller di visualizzazione ed essere facilmente attivato e disattivato. Non ha funzionato perché, come abbiamo imparato oggi, < meme> non si limita a sostituire un metodo esistente tramite categoria < /meme>.
Cosa ci manca?!?
Questo codice ha un ciclo infinito, non è vero?Dovresti chiamare [super viewDidAppear: animated]; –
@BrunoDomingues poiché questa è una categoria su UIViewController, la chiamata super chiamerebbe viewDidAppear su NSObject (superclasse di UIViewController) che non esiste. – adamweeks
È possibile trovare la vista visibile corrente (controller di visualizzazione) da UIWindow rootViewController. – 9dan