2011-10-17 2 views
1

저는 사운드 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를 배우고 있습니다. 그러나 이것이 올바른 접근법인지 확신 할 수 없습니다.

내 응용 프로그램 설계가 잘못되어 잘못 되었다면 제게 그 이유를 설명해주십시오.

답변

1

대리인을 지정할 수는 있지만 유연하지 않고 최적 설계가 아닙니다. 프로젝트가 성장함에 따라 진행 상황을 추적하기가 어려울지라도 알림은 정상입니다. KVO 접근 방식을 권장합니다. 나중에 디자인을 변경하면 더욱 유연 해집니다.

dealloc 메소드에서도 옵저버로서의 역할을 잊지 마십시오. 건배!

+0

KVO가 실제로 취할 방향이라는 것을 확인해 준 Francis에게 감사드립니다. KVC/KVO에 대해 더 많은 것을 배우기 위해 고착 할 시간. –

+0

미래에 나 자신이나 다른 사람을 참조 할 수있는이 기사를 발견하면 다음 기사를 발견했습니다. http://cocoawithlove.com/2008/06/five-approaches-to-listening-observing.html KVO 대 알림에 대한 단점. –

0

위임을 구현하거나 NSNotificationCenter를 사용하여 알림을 게시 할 수 있습니다.

+0

이 작업의 대표자를 좀 더 일반적인 방법으로 구현하고 있습니까? 나는 그 일을 올바른 길로 인도하기 위해 자신을 가르친 후에 나간다. –

관련 문제