Когда мое приложение загружается первым, я установил свойство rootViewController
моего UIWindow
в controllerA
.Изменение rootViewController UIWindow
Когда-нибудь во время моего приложения я решил изменить rootViewController
на controllerB
.
Проблема в том, что иногда, когда я делаю переход в controllerB
, я вижу вид controllerA
. По какой-то причине этот вид не удаляется. Еще больше беспокоит то, что после установки rootViewController
на controllerB
метод никогда не запускается.
Я попытался удалить подвиды из UIWindow
вручную перед переключением на controllerB
, что решает проблему увидеть controllerA
«s мнения в фоновом режиме, но controllerA
» dealloc s еще никогда не вызывается. Что здесь происходит ????
яблоки документы говорят:
Корневой контроллер представления обеспечивает представление содержимого окна. Назначение контроллера представления этому свойству (программно или с помощью 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;
}
Можете ли вы предоставить код для вашего метода 'application: didFinishLaunchingWithOptions:' в делете приложения? – Cezar
Глупый вопрос, но вы устанавливаете 'controllerA' на нуль, когда вы нажимаете второй контроллер? Если нет, то это не будет отменено. (Я предполагаю, что вы) – Putz1103
Я никогда не держу указатель на контроллер, поэтому не уверен, что я установил бы в ноль. – aloo