В моем приложении я программно меняю контроллеры корневого представления на основе действий пользователя, например. логин/выход.UIWindow setRootViewController не очищает существующую иерархию
В iOS 8 - Я замечаю странную проблему. Даже после установки rootViewController в окне прежняя иерархия сохраняется. Я просто проверил его, захватив иерархию представлений.
- (void) logout{
[self.window setRootViewController:[self loadLoginView]];
}
-(UIViewController *) loadLoginView{
WelcomeScreenVC *wsVC;
wsVC = [[WelcomeScreenVC alloc] initWithNibName:@"WelcomeScreenVC" bundle:nil];
UINavigationController *onboardingVC = [[UINavigationController alloc]initWithRootViewController:wsVC];
return onboardingVC;
}
Даже после выполнения этой строки кода старая иерархия входов по-прежнему сохраняется. Был бы признателен, если кто-нибудь может предположить, что происходит за кулисами.
Edit: Я просто смотрел на UIWindow setRootViewController документации и вот что Apple, должен сказать об этом:
Корневая-контроллер обеспечивает представление содержимого окна. Назначение контроллера вида для этого свойства (либо программно , либо с помощью Interface Builder) устанавливает вид контроллера представления как вид содержимого окна . Если в окне есть существующее представление , иерархия, старые виды удаляются до того, как установлены новые .
Можете ли вы поделиться кодом для '[self loadLoginView]' пожалуйста? –
@JoshHeald добавила его на вопрос –
Это скопировано из вашего приложения напрямую, или вы написали его? Я спрашиваю, потому что 'loadLoginView' объявляет тип возврата' void', что не помогло бы вопросам –