2012-01-15 4 views
2

私はストーリーボード内の最初のアプリケーションVCとして設定されたUIViewControllerを拡張する "Splash screen" ViewControllerを持っています。このコントローラーにはログインフォームがあります。「スプラッシュ」UIViewControllerを使用して、条件付きで別のView Controllerにリダイレクトする方法はありますか?

アプリが起動し、画面に何かが表示される前に、このスプラッシュVCでユーザーの既定値を確認して、ユーザーが既にログインしているかどうかを確認します。アプリのホームVC、何かが画面に表示される前にすべて。

ユーザーがログインしていない場合は、スプラッシュVCの読み込みが完了し、ログインフォームが表示されます。

これを実装するにはどうすればよいですか?これらのチェックのすべてをinitメソッドに置くことはできますか?私はスプラッシュVCのinitメソッドのコードを何とか動かすのに苦労していましたが、何らかの理由でこれらのメソッドが呼び出されることはありません。

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 ... 'が終了するまで表示されないので、データロード操作とlogin-status-checkはバックグラウンドで実行する必要があります。以下の2つの 'dispatch_sync'は、メインキューでUI操作を実行するためのものです。 (UIの操作はメインスレッドで実行する必要があります)このすべてに慣れていない場合は、GCDについて学習することをおすすめします。これは良いチュートリアルです:http://www.raywenderlich.com/4295/multithreading-and-grandcentral-dispatch-on-for-beginners-tutorial – barley

関連する問題