Когда мое приложение сначала загружается, я устанавливаю свойство rootViewController моего UIWindow на controllerA.
Когда-нибудь во время моего приложения я решил изменить rootViewController на controllerB.
Проблема в том, что иногда, когда я делаю переход в controllerB, я вижу controllerA представление за ним. По какой-то причине этот вид не удаляется. Еще более тревожным является то, что после установки метода rootViewController в controllerB метод controllerA dealloc никогда не запускается.
Я попытался удалить подзоны UIWindow вручную, прежде чем переключиться на controllerB, что решает проблему просмотра controllerA представлений в фоновом режиме, но controllerA dealloc все равно никогда не будет вызван. Что происходит здесь?
Яблоки говорят:
Контроллер корневого представления предоставляет представление содержимого окна. Назначение контроллера представления этому свойству (программно или с помощью Interface Builder) устанавливает представление диспетчера представлений в качестве представления содержимого окна. Если окно имеет существующую иерархию представлений, старые представления удаляются до того, как будут установлены новые.
UPDATE
Вот код моего 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;
}