iPhone iOS使用故事板实现登录/注销工作流程的正确方法是什么?

时间:2013-07-29 18:05:46

标签: ios objective-c uiviewcontroller uistoryboard presentmodalviewcontroller

我在iPhone项目故事板中定义了以下工作流程:

  • 登录视图控制器在故事板中设置为根视图控制器。
  • 登录有一个单独的工作流程,用于登录和设置帐户。
  • 这两个工作流程最终以模式方式显示带有主要应用内容的标签栏
  • 对于后续的应用启动,我以编程方式确定要在appDidFinishLaunching:中实例化的正确控制器
  • 对于后续应用程序使用,带有主要内容的标签栏是根视图控制器(以编程方式设置)

现在我想实现一个“注销”过程 - 一个按钮擦除所有用户数据,并将用户带回原来的“登录/设置帐户”屏幕。

我遇到了一个问题,由于应用程序的多个状态,我需要有多个路径才能返回主屏幕。例如:

                      UIViewController* parent = self.presentingViewController;
                      UIViewController* grandparent = self.presentingViewController;
                      [self.presentingViewController dismissViewControllerAnimated:YES completion:^{
                          DLog(@"first dismiss");

                          DLog(@"%@",parent);
                          DLog(@"%@",grandparent);

                          [parent dismissViewControllerAnimated:YES completion:^{
                              DLog(@"second dismiss");
                              [grandparent.navigationController popToRootViewControllerAnimated:YES];
                          }];
                      }];

我如何实施上面定义的登录/注销逻辑?

是否有正确的方法可以完全折叠当前屏幕上的视图层次结构并将其替换为另一个?

我在想这个:

 [self.window setRootViewController:tabBarViewController];

但我不确定这是否会正确卸载我正在分离的旧rootViewController堆栈所使用的所有资源。

1 个答案:

答案 0 :(得分:-1)

使用NSUserDefault存储登录值,在调用任何viewController之前检查userdefault ... 在注销时从Userdefaults删除值或在注销时使用此代码

NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];