私は覚えており、サウンド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かどうかを判断し、そうであればメインビューをスワップします。しかし、これが正しいアプローチであるかどうかはわかりません。
私のアプリケーション設計が致命的に間違っている場合は、修正して理由を説明してください。
KVOが本当に取るべき方向であることを確認してくれたFrancisに感謝します。 KVC/KVOの詳細を学習する時間。 –
今後、自分自身や他の誰かがこの記事を見つけようとしたら、私はこの記事を見つけました:http://cocoawithlove.com/2008/06/five-approaches-to-listening-observing.html KVOと通知の対決。 –