2012-01-15 1 views
2

내 스토리 보드에서 초기 앱 VC로 설정된 UIViewController를 확장하는 "Splash screen"ViewController가 있습니다. 이 컨트롤러에는 로그인 양식이 있습니다."Splash"UIViewController를 사용하여 다른 뷰 컨트롤러로 조건부로 리디렉션 할 수 있습니까?

앱이 시작되고 화면에 아무 것도 표시되지 않으면이 스플래시 VC가 사용자 기본값을 확인하여 사용자가 이미 로그인되어 있는지 확인합니다. 그렇다면 스플래시 VC가 응용 프로그램의 홈 VC, 아무것도 전에 화면에 표시됩니다.

사용자가 로그인하지 않은 경우 로그인 양식을 표시하여 스플래시 VC의로드를 완료하고 싶습니다.

어떻게 구현하나요? 이 모든 수표를 초기화 메소드에 넣을 수 있습니까? 나는 스플래시 VC 초기화 메소드에서 어떤 코드를 실행하는 데 어려움을 겪고 있었다. 어떤 이유로 이러한 메소드가 호출되지 않는다.

viewDidLoad 메서드의 코드는 정상적으로 실행되지만 코드를 실행하면 이미 로그인 한 사용자가 홈 화면에 바로 응용 프로그램을 시작할 수 있습니다.

제안 사항? 미리 감사드립니다.

답변

4

이 논리를 적용 할 장소를 선택하면 응용 프로그램 대리인의 application didFinishLaunchingWithOptions:에 있습니다. 다음과 같이 표시됩니다.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ 

     ////////////////////////////////////////////// 
     // 1. do loading data etc. 
     // 2. check whether user is signed in or not 
     ////////////////////////////////////////////// 

     if(already signed in) 
     { 
      dispatch_sync(dispatch_get_main_queue(), ^{ 
       [self.window.rootViewController performSegueWithIdentifier:@"segue identifier to home VC" sender:self.window.rootViewController]; 
      }); 
     } 
     else 
     { 
      dispatch_sync(dispatch_get_main_queue(), ^{ 
       [self.window.rootViewController performSegueWithIdentifier:@"segue identifier to login VC" sender:self.window.rootViewController];     
      }); 
     }    
    }); 
    return YES; 
} 

그리고 코드 작성을 도와주는 빠른 스토리 보드입니다. 바라기를 당신은 아이디어를 얻는다.

Storyboard for the splash-login, splash-home

+0

감사합니다. 이것은 의미가 있습니다. 내가 곤란을 겪고 있었던 디자인 패턴이었다. – Teddy

+0

왜 모든 파견 블록이 있습니까? – Teddy

+2

첫 번째'dispatch_async'는 프로세스를 여기에서 차단하지 않는 것입니다. 'application : didFinishLaunching ...'이 종료 될 때까지 스플래시보기가 표시되지 않으므로 데이터로드 작업과 로그인 상태 확인이 백그라운드에서 실행되어야합니다. 뒤따라 오는 두 개의 'dispatch_sync'는 메인 큐에서 UI 작업을 실행하기위한 것입니다. (UI 작업은 메인 스레드에서 실행되어야합니다.)이 모든 것에 익숙하지 않으면 GCD에 대해 배우는 것이 좋습니다. 이 튜토리얼은 좋은 튜토리얼입니다 : http://www.raywenderlich.com/4295/multithreading-and-grand-central-dispatch-on-for-beginners-tutorial – barley

관련 문제