2016-08-14 4 views
0

사용자가 로그인해야하는 앱을 개발 중입니다. 사용자가 내 앱에 로그인 한 상태에서 세션이 서버에서 유지 관리된다고 가정 해 보겠습니다. 네트워크 문제 또는 기타 이유로 인해 세션이 앞으로 서버에서 만료됩니다. 그런 다음 서버 요청에 대해 서버가 잘못된 요청을 던집니다. 나는이 상황을 파악하고 그의 세션이 만료되었고 다시 로그인해야한다는 경고를 사용자에게 전합니다 .Cleared NSUserDefaults도 마찬가지입니다. Alert OK button을 클릭하면 signIn 페이지가 사용자에게 표시됩니다.
여기 내 질문에 맞습니까? ViewController 설명서에서 그 내용은 presented ViewControllerpresenting ViewController 위에 표시됩니다. 따라서 SignInViewController을 제시 한 후 이전 ViewController에 어떤 일이 발생했는지 알고 싶습니다. 메모리가 누출되거나 예기치 않은 동작이 발생합니까? 질문을 명확히하기 위해 아래 흐름을 추가했습니다. 나는 마지막 단계 후 알고 싶은 것은 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]; 
} 
+0

나는 당신의 질문을 이해하지 못한다; 세션이 만료되었고 SignInViewController를 제시해야한다는 이전 뷰 컨트롤러에 알릴 필요가 있습니까? –

+0

아니요,보기를 알리고 싶지 않습니다. 난 그냥 SignInViewController 제시하고 싶습니다. 제 질문은 이미 제시된 견해에 일어난 일입니다. 제 수정 된 질문을 확인하십시오. –

답변

0

모달 뷰를 제시하고 있기 때문에 컨트롤러의 상단에있는 뷰 컨트롤러는 이전의 뷰 컨트롤러를 단순히 덮어 씁니다. 현재 스택에있는 모든 뷰 컨트롤러는 메모리에 남아 있습니다. 이전보기 컨트롤러에 또는 NSNotification을 사용하여 로그인 작업의 성공 또는 실패를 알릴 수도 있습니다.

SOF에는보기 컨트롤러의 수명주기를 더 명확히 할 수있는이 항목에 대한 다른 질문이 있습니다. 이 : Releasing ViewControllers form memory inside a UINavigationController

+0

예, 그건 내 관심사입니다. 오래된 viewcontrollers를 메모리에 유지할 필요가 없으므로 사용자가 다시 SignIn을 강제 실행하게됩니다. –

관련 문제