저는 사운드 MVC 디자인을 올바르게 구현하는 방법을 배우고 있습니다.사용자가 인증을 받으면 뷰를 전환하는 방법
NSWindowController에서 관리하는 단일 창 응용 프로그램은 login (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;
그리고 내을 인증 방법 :
// 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"
}
제 질문은 일단 사용자가 인증되고 사용자의 기본값이 업데이트되면 반영됩니다. MainViewController로 바꾸기 위해 MyWindowController를 올바르게 명령하는 방법은 무엇입니까?
키 : UserAuthenticated가 true이고 그렇지 않은 경우 기본보기에서 스왑되는지 여부를 확인하기 위해 MyWindowController 내의 KVO를 배우고 있습니다. 그러나 이것이 올바른 접근법인지 확신 할 수 없습니다.
내 응용 프로그램 설계가 잘못되어 잘못 되었다면 제게 그 이유를 설명해주십시오.
KVO가 실제로 취할 방향이라는 것을 확인해 준 Francis에게 감사드립니다. KVC/KVO에 대해 더 많은 것을 배우기 위해 고착 할 시간. –
미래에 나 자신이나 다른 사람을 참조 할 수있는이 기사를 발견하면 다음 기사를 발견했습니다. http://cocoawithlove.com/2008/06/five-approaches-to-listening-observing.html KVO 대 알림에 대한 단점. –