La modification de la rootViewController d'un UIWindow

Lorsque mon application se charge tout d'abord, j'ai mis le rootViewController propriété de mon UIWindow à controllerA.

Au cours de mon application, j'ai choisi de changer le rootViewController à controllerB.

Le problème est que, parfois, quand je fais un flip de transition dans controllerB, je vois controllerApoint de vue de derrière. Pour une raison que point de vue n'est pas supprimé. Ce qui est encore plus inquiétant, c'est qu'après le réglage de la rootViewController à controllerB, controllerA's dealloc méthode n'obtient jamais tiré.

J'ai essayé de supprimer les sous-vues de UIWindow manuellement avant de passer à controllerB, qui résout le problème de voir controllerA's vues dans le fond, mais controllerA's dealloc encore n'est jamais appelé. Ce qui se passe ici????

Pommes docs disent:

La vue racine contrôleur permet l'affichage du contenu de la fenêtre. L'affectation d'une vue contrôleur à cette propriété (par programmation ou en utilisant l'Interface Builder) installe le point de vue du contrôleur de vue que l'affichage du contenu de la fenêtre. Si la fenêtre a une vue existante de la hiérarchie, les vues anciennes sont supprimées avant les nouveaux sont installés.

Mise à JOUR

Voici le code de mon 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;
}
  • Pouvez-vous fournir le code de votre application:didFinishLaunchingWithOptions: méthode dans votre délégué d'application?
  • Question stupide, mais ne vous réglez le controllerA à zéro lorsque vous poussez le second contrôleur? Si non, alors il ne sera pas dealloc. (Je suis en supposant que vous êtes)
  • Je n'ai jamais de garder un pointeur à controllerA donc pas sûr de ce que je serait fixé à néant.
  • juste mis à jour à la question avec une version condensée de mon délégué d'application du code
InformationsquelleAutor aloo | 2013-07-13