成功登录后重新分配RootViewController

Jam*_*mes 9 cocoa-touch objective-c ios

我的iOS应用程序打开时会显示登录提示.用户登录后,会切换到主视图.

在application:didFinishLaunchingWithOptions中,我将RootViewController设置为LoginViewController.LoginViewController将AppDelegate作为其委托:

LoginViewController *login = [[LoginViewController alloc] init];
[login setDelegate:self];
[[self window] setRootViewController:login];
Run Code Online (Sandbox Code Playgroud)

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

if([[self delegate] respondsToSelector:@selector(userDidLogin)]) {
    [[self delegate] userDidLogin];
}
Run Code Online (Sandbox Code Playgroud)

userDidLogin创建一个新的UINavigationController并将其指定为RootViewController:

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

通过向LoginViewController的dealloc方法添加NSLog,看起来LoginViewController在该阶段被销毁,并且执行按预期继续.

我没有做任何明确关闭LoginViewController的事情,只是假设分配一个新的RootViewController将意味着旧的消失并被ARC整理掉.

我能依靠那种情况吗?这是一种明智的做法吗?

提前致谢.

詹姆士

Mar*_*n R 11

文件的的rootViewController属性状态:

如果窗口具有现有视图层次结构,则在安装新视图之前将删除旧视图.

因此,如果您不保留自己的引用LoginViewController,它将被销毁.

也许这样:RootViewController Switch Transition Animation对你来说也很有趣,因为它描述了如何用动画切换根视图控制器.