Po załadowaniu mojej aplikacji ustawię właściwość rootViewController
mojego UIWindow
na controllerA
.Zmiana obiektu rootViewController w UIWindow
Kiedyś podczas mojej aplikacji wybrałem zmianę rootViewController
na controllerB
.
Problem polega na tym, że czasami, gdy wykonuję zmianę przejścia w widoku controllerB
, widzę za nią widok controllerA
. Z jakiegoś powodu widok ten nie jest usuwany. Co jeszcze bardziej niepokojące jest to, że po ustawieniu metody nigdy nie zostanie wywołana.
Próbowałem usuwanie subviews z UIWindow
ręcznie przed włączeniem do controllerB
, który rozwiązuje ten problem widząc controllerA
„s widoki w tle, ale controllerA
” dealloc wciąż nigdy nie jest wywoływana. Co tu się dzieje ????
Jabłka docs powiedzieć:
Korzeń widok kontroler zapewnia widok zawartość okna. Przypisanie kontrolera widoku do tej właściwości (programowo lub przy użyciu Kreatora interfejsu) powoduje zainstalowanie widoku kontrolera widoku jako widoku zawartości okna. Jeśli okno ma istniejącą hierarchię widoku, stare widoki są usuwane przed instalacją nowych.
UPDATE
Oto kod mojego AppDelegate:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self showControllerA];
[self.window makeKeyAndVisible];
return YES;
}
- (void)showControllerA
{
ControllerA* a = [ControllerA new];
self.window.rootViewController = a;
}
- (void) showControllerB {
ControllerB* b = [ControllerB new];
self.window.rootViewController = b;
}
Czy możesz podać kod dla metody 'application: didFinishLaunchingWithOptions:' w delegacie aplikacji? – Cezar
Głupie pytanie, ale czy ustawiasz 'controllerA' na zero, kiedy naciskasz drugi kontroler? Jeśli nie, to nie zwolni. (Zakładam, że jesteś) – Putz1103
Nigdy nie trzymam wskaźnika na kontrolerze, więc nie jestem pewien, co ustawiłbym na zero. – aloo