Когда мое приложение сначала загружается, я устанавливаю свойство 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;
}