Подтвердить что ты не робот

Изменение rootViewController UIWindow

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

Ответ 1

Оказывается, есть две отдельные проблемы. 1) У меня был цикл сохранения в контроллере A, поэтому он никогда не получал dealloc'd. Во-вторых, чтобы изменить контроллер корневого представления, вы должны сначала удалить подвид окна (даже если документы предлагают иначе)

Ответ 2

Проблема может быть в вашей реализации ControllerA или ControllerB, они могут сохранить "я" в коде, поэтому ARC can not автоматически отключит вас ViewController. Можете ли вы опубликовать реализацию ControllerA и ControllerB.