2011-10-17 10 views
1

私は覚えており、サウンドMVCデザインを正しく実装することをしっかりと把握しています。ユーザーが認証された後にビューを切り替える方法

NSWindowControllerによって管理される1つのウィンドウアプリケーションがあり、ログイン用の2つのView Controller(LoginViewController)と、ユーザーがログインした別のビュー(MainViewController)があります。これは正常に動作します

// MyWindowController.m 
// pseudocode below 
- (void)awakeFromNib 
    IF the user is logged in 
     set myTargetView to the view of MainViewController 
    ELSE the user is not logged in 
     set myTargetView to the view of LoginViewController 

、その後、私のLoginViewControllerの見解では、私は以下のアウトレットとアクションを持っている:ユーザーがログインかNSUserDefaultsを経由している場合MyWindowControllerのawakeFromNibメソッド内

// MyWindowController.h 
@interface MyWindowController : NSWindowController { 
    IBOutlet NSView* myTargetView; 

    LoginViewController *loginViewController; 
    MainViewController *mainViewController; 
} 

- (void)changeViewController:(NSInterger)view; 

@property (nonatomic, retain) LoginViewController *loginViewController; 

は、私が検出しています:

// LoginViewController.h 
@interface LoginViewController : NSViewController { 
    IBOutlet NSTextField *username; 
    IBOutlet NSSecureTextField *password; 
} 


- (IBAction)authenticate:(id)sender; 

そして、私のauthenticateメソッド:

// LoginViewController.m 
- (IBAction)authenticate:(id)sender 

    ... 

    IF (authenticated) { 
     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
     [defaults setInteger:1 forKey:@"UserAuthenticated"]; 
    } ELSE { 
     // Update loginView to display "Wrong username/password" 
    } 

私の質問は、ユーザーが認証され、ユーザーのデフォルトがそのように反映されると、私の質問です。 MyWindowControllerをMainViewControllerにスワップするように正しくコマンドするにはどうすればいいですか?

私はMyWindowController内のKVOを覚えているので、UserAuthenticatedキーがtrueかどうかを判断し、そうであればメインビューをスワップします。しかし、これが正しいアプローチであるかどうかはわかりません。

私のアプリケーション設計が致命的に間違っている場合は、修正して理由を説明してください。

答えて

1

デリゲートを行うことはできますが、柔軟性がなく最適設計ではありません。通知は問題ありませんが、プロジェクトが成長するにつれて起こっていることを追跡するのが難しくなります。 後でデザインを変更した方が柔軟性があるので、KVOアプローチをお勧めします。

deallocメソッドでもオブザーバーとして自分自身を削除することを忘れないでください。乾杯!

+0

KVOが本当に取るべき方向であることを確認してくれたFrancisに感謝します。 KVC/KVOの詳細を学習する時間。 –

+0

今後、自分自身や他の誰かがこの記事を見つけようとしたら、私はこの記事を見つけました:http://cocoawithlove.com/2008/06/five-approaches-to-listening-observing.html KVOと通知の対決。 –

0

NSNotificationCenterを使用して、代理人を実装するか、通知を送信できます。

+0

このタスクの代理人をより一般的な方法で実装していますか?私は自分のことを教えた後に、正しい道を行くことからやります。 –

関連する問題