会话过期后显示登录页面

时间:2016-08-14 08:49:06

标签: ios objective-c uiviewcontroller

我正在开发一款需要用户登录应用的应用。假设用户登录到我的应用程序并在服务器上维护会话。由于任何网络问题或任何其他原因,该会话将来在服务器上过期。在此之后,对于任何服务器请求,服务器将抛出错误请求。我正在捕捉这种情况,并向用户发出警报,告知他的会话已过期,他们需要重新登录。同样清除NSUserDefaults。点击Alert OK button后,会向用户显示signIn页面 我的问题是,这是正确的方法吗?从ViewController文档中,它声明presented ViewController将显示在presenting ViewController上。所以我想知道在呈现SignInViewController之后我之前的ViewControllers发生了什么,它会泄漏任何内存还是会出现任何意外行为?澄清问题在下面添加了一个流程。我想知道在最后一步之后,ViewControllerB

会发生什么

SignInViewController> ViewControllerA> ViewControllerB>(会话已过期)> AlertViewController>(已呈现)SignInViewController

- (void)presentLoginScreenAfterSessionIsExpired
{
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"employeeId"];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"userName"];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"emailId"];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"profileImageData"];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"role"];

/** showing alert to the User **/
UIAlertController *alert = [UIAlertController alertControllerWithTitle:
@"Oops!" message:@"Your Session Has Been Expired, Please Re-Login" 
preferredStyle:UIAlertControllerStyleAlert];

UIAlertAction *okAction = [UIAlertAction actionWithTitle:
NSLocalizedString(@"OK", @"OK Action")
style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) 
{ 
 UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

  /** presenting signInViewController **/

    UIViewController *vc = [storyBoard instantiateViewControllerWithIdentifier:
@"signInViewController"];
 [self presentViewController:vc animated:YES completion:NULL];
}];

[alert addAction:okAction]; // Here action is added to alert controller.
[self presentViewController:alert animated:YES completion:nil];
}

1 个答案:

答案 0 :(得分:0)

由于您在ViewControllerB之上呈现模态视图控制器,因此视图控制器将简单地覆盖前一个视图控制器。您当前堆栈中的所有视图控制器都将保留在内存中。您还可以使用protocolNSNotification通知您之前的视图控制器有关登录操作成功或失败的信息。

SOF还有关于此主题的其他问题,可以更清楚地了解视图控制器的生命周期,例如:这个:Releasing ViewControllers form memory inside a UINavigationController