成功登录后重新分配RootViewController的(Re-assigning RootView

2019-09-01 17:10发布

我的iOS应用有一个登录提示打开。 一旦用户登录时,它切换到主视图。

在应用中:didFinishLaunchingWithOptions,我设置RootViewController的一个LoginViewController。 该LoginViewController拥有的AppDelegate作为其代表:

LoginViewController *login = [[LoginViewController alloc] init];
[login setDelegate:self];
[[self window] setRootViewController:login];

如果登录成功,LoginViewController调用AppDelegate中的userDidLogin方法:

if([[self delegate] respondsToSelector:@selector(userDidLogin)]) {
    [[self delegate] userDidLogin];
}

userDidLogin创建一个新的UINavigationController并将其分配为RootViewController的:

- (void)userDidLogin
{
    MainRecordViewController *mainRecordViewController = [[MainRecordViewController alloc] init];
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:mainRecordViewController];
    [[self window] setRootViewController:navController];
}

通过添加的NSLog到LoginViewController的dealloc方法,它看来LoginViewController在这个阶段销毁和执行继续按预期。

我没有做任何事情来显式地关闭LoginViewController,只是依靠这样的假设分配新RootViewController的将意味着旧的消失,由ARC收拾好。

我可以依靠总是既然如此? 这是一个明智的做法?

提前致谢。

詹姆士

Answer 1:

该文档的的rootViewController属性状态:

如果窗口有一个现有的视图层次,安装了新的之前被删除的旧观点。

所以,如果你没有自己的基准存到LoginViewController ,它就会被破坏。

也许这: RootViewController的切换过渡动画也是你有意思,因为它描述了如何将根视图控制器与动画切换。



文章来源: Re-assigning RootViewController after successful login