2011-09-13 4 views
0

今日、私はベストプラクティスについて疑問に思っています。この簡略化された例にどのようにアプローチすればよいかについてのコメントをいただければ幸いです。ルートビューコントローラを使用して読み込むビューを決定する

ログインが便利なアプリがあるとします。そこで、私たちは、2つのビューと、対応するビューコントローラ、LoginViewとMainViewを持っています。 MainViewはナビゲーションコントローラのルートビューとルートコントローラです。 LoginViewは、ユーザーがログインできるようにするビューです。

アプリが初めて起動されると、ログインが完了したら、LoginViewが表示されてからMainViewが表示されます。その後の起動時に、MainViewのみが表示されます。これに

一つのアプローチは、applicationDidFinishLaunchingでこのすべてを処理するために、次のようになります。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    UIViewController *rootController = [[MainView alloc] init]; 
    navigationController = [[UINavigationController alloc] initWithRootViewController:rootController]; 
    [self.window addSubview:navigationController.view]; 
    [self.window makeKeyAndVisible]; 

    if (notLoggedIn) { 
     LoginView *vc = [[LoginView alloc] initWithNibName:@"LoginView" bundle:nil]; 
     [rootController presentModalViewController:vc animated:NO]; 
    } 

    return YES; 
} 

独立した専用の「ルート」ビューコントローラでこれを処理できるようにするとよいでしょう。このコントローラはAppDelegateによって読み込まれ、適切なView Controllerをロードします。これがより良いアプローチになるのであれば誰でもアドバイスを提供できますか?もしそうなら、それについてどうやって行くのですか?

このような状況では、別の方法をお勧めしますか?

ありがとうございました。

答えて

0

1つのアプローチは、代理人である認証プロバイダを持つことです。ビューで消費するモデルクラスでは、認証プロバイダを設定できます。デリゲートは、認証され、認証されたかどうかを判断するための署名を持つプロトコルです。

guiは認証されているかどうかに応答できる認証プロバイダデリゲートをモデルに提供し、認証されていない場合は認証用のモーダルビューコントローラを表示します。異なるモデルメソッドは、(プロバイダに尋ねることによって)認証されることを保証し、そうでない場合は、プロバイダ代理人の認証を呼び出します。 guiがauthプロバイダを設定するので、モデルはguiインタラクションでカプセル化とベーキングを破ることはありません。モデルは単純にコールバックを呼び出しています。

これは、自分がどのビューにいるのか、どの状態にいるのかは関係ありません。特定のビューがモデルを横切るため、認証されていない場合はプロンプトが表示されます。別の例として、一定期間後に認証トークンがタイムアウトするとします。起動時にauthが特定のビューに焼き付けられた場合、どうすればよいですか?

+0

ありがとう、bryanmac!私はこれがどこに行くのが好きです。私の理解を確認してください。私はクラスを追加します:AuthProvider。次に、MainViewコントローラはModel.authDelegate = AuthProviderを設定します。コントローラが制限されたデータにアクセスしようとすると、モデルはAuthProviderの関数を呼び出して、ユーザーが現在認証されているかどうかを判断します。一致しない場合、AuthProviderにログインプロンプトが表示されます。しかし、AuthProviderがモーダルビューコントローラを提示する場合は、MainViewコントローラへの参照が必要です。 AuthProviderを初期化するときにMainViewから渡しますか? – jmac

関連する問題