2013-05-02 20 views
9

La mia app iOS si apre con un prompt di login. Una volta che l'utente si collega, passa alla vista principale.Riassegnazione di RootViewController dopo il login riuscito

Nell'applicazione: didFinishLaunchingWithOptions, ho impostato il RootViewController su LoginViewController. Il LoginViewController ha l'AppDelegate come suo delegato:

LoginViewController *login = [[LoginViewController alloc] init]; 
[login setDelegate:self]; 
[[self window] setRootViewController:login]; 

Se l'accesso riesce, il LoginViewController chiama il metodo userDidLogin del AppDelegate:

if([[self delegate] respondsToSelector:@selector(userDidLogin)]) { 
    [[self delegate] userDidLogin]; 
} 

userDidLogin crea una nuova UINavigationController e lo assegna come RootViewController:

Aggiungendo un NSLog al metodo dealloc di LoginViewController, sembra che LoginViewControl in quel momento viene distrutto e l'esecuzione continua come previsto.

Non ho fatto nulla per chiudere in modo esplicito LoginViewController, basandomi solo sul presupposto che l'assegnazione di un nuovo RootViewController significherà che il vecchio scompare e viene riordinato via ARC.

Posso contare sul fatto che sia sempre il caso? È un approccio sensato?

Grazie in anticipo.

James

+1

Nota a margine: se non si è sicuri di cosa e cosa non viene rilasciato da ARC, è possibile implementare il metodo dealloc e stampare qualcosa come NSLog (@ "L'istanza di MySuperDuperClass è stata deallocata da ARC"). – Groot

+0

Grazie - L'ho già fatto. Questo è ciò che intendevo con "Aggiungendo un NSLog al metodo dealloc ...". La vista sembra chiudersi correttamente e sembra che sia sempre stata deallocata, ma mi chiedevo se posso sempre fare affidamento su quello. Sospetto che vada bene, ma sembra una supposizione che potrebbe andare storta ... – James

risposta

11

La documentation degli stati rootViewController proprietà:

Se la finestra ha una gerarchia vista esistente, le vecchie idee sono rimosso prima dell'installazione dei nuovi.

Quindi, se non si mantiene il proprio riferimento allo LoginViewController, verrà distrutto.

Forse questo: RootViewController Switch Transition Animation è anche interessante per te, in quanto descrive come passare il controller di visualizzazione radice con un'animazione.

+1

Mi piace - una risposta, oltre a una raffinatezza estetica. Molto apprezzato. – James

Problemi correlati