2011-08-02 4 views
0

내 앱에는 로그인이 있고 로그인에 성공하면 사용자는 세션 ID를 얻습니다. 사용자의 세션이 만료되고 만료 된 세션이있는 페이지를 요청하면 백엔드는 세션이 만료되었다고보고하고 사용자가 다시 로그인해야하며 내 앱은 popToRootViewControllerAnimated (로그인 페이지)를 호출합니다. 다운로드가 완료되면 UIViewController에 대한 콜백을 예약하기 위해 NSURLConnection 클래스를 사용하고 있습니다. 내가 실행중인 문제는 내 viewDidLoad 동안 NSURLConnection 일정 및보기 컨트롤러가 나타나기 전에 연결 보고서를 다시 것입니다. 나는 NSURLConnectionviewDidAppear에 넣겠지 만,보기가 나타날 때마다 서버에 접속하고 싶지 않습니다. 누구든지이 문제를 해결하는 가장 좋은 방법을 알고 있습니까?ViewDidAppear 전에 iPhone을 터지는 아이폰

답변

2

첫째, 열거 변수를 선언 :

typedef enum { 
    StatusLoggedOut, 
    StatusAttemptingLogin, 
    StatusLoggedIn 
} LoginStatus; 

그런 다음 로그인 상태를 저장하기 위해 뷰 컨트롤러에 멤버 변수를 추가합니다. 그런 다음, viewDidAppear 내부 :

- (void)viewDidAppear:(BOOL)animated 
{ 
    if (loginStatus == StatusLoggedOut) { 
     loginStatus = StatusAttemptingLogin; 
     // start the NSURLConnection 
    } 
} 

로그인이 완료되면, 당신은 (알고 보니 방법에 따라) StatusLoggedIn 또는 StatusLoggedOut에 상태를 전환 할 수 있습니다 : 당신은이 작업을 수행 할 수 있습니다.

단순한 BOOL로 도망 갈 수는 있지만 경험에 의하면 모든 중간 상태를 나타내는 것이 더 좋습니다.

또한 이것에 대해서는 묻지 않았지만, 사용자가 로그인 화면을 모달보기로 제시하면 사용자 경험이 훨씬 좋아질 것이라고 생각합니다. popToRootViewController을 사용하면 사용자가 앱에서 자신의 자리를 잃어 버리게되어 성가 시게됩니다. (저장하지 않고 복원하는 경우가 아니라면 직접 작업해야합니다.)

+1

+1 모달 뷰 컨트롤러에 대한 좋은 제안은 +1 할 수 있습니다. – InsertWittyName

관련 문제