2011-08-24 5 views
0

문서 기반이 아닌 간단한 응용 프로그램이 있습니다. 사람들이 로그인하거나 사용자를 추가 할 수있게 해주는 로그인 창을 갖고 싶습니다. 그리고 로그인에 성공하면 기본 페이지를로드하려고합니다. 메인 페이지에서 로그 아웃을 클릭하면 메인 페이지가 삭제되고 로그인 페이지로 돌아갑니다. 은 간단한 계획처럼 들리지만 어떤 이유로 나는 문제가 있습니다.멀티 윈도우 문제, 코코아

지금 당장 가지고있는 방법은 고객이 AppDelegate 메인 파일에 로그인했는지 여부를 확인하고 다른 창 컨트롤러를로드합니다. 고객이 로그인하면 로그인 컨트롤러에서 AppDelegate로 다시 알림을 보내고 주 창에 다른 창 컨트롤러를로드합니다. 이 같은

뭔가 :

if([[settings get:@"isLoggedIn"] isEqualToString:@"Yes"]) 
{ 
    MainController *tmpMainController = [[MainController alloc] initWithWindowNibName:@"MainWindow"]; 
    self.mainController = tmpMainController; 
    NSWindow *mainWindow = [tmpMainController window]; 
    [mainWindow makeKeyAndOrderFront:self]; 
    [tmpMainController release]; 

} else { 
    LoginController *tmpViewController = [[LoginController alloc] initWithWindowNibName:@"LoginWindow"]; 
    self.loginController = tmpViewController; 
    loginWindow = [tmpViewController window]; 
    [loginWindow makeKeyAndOrderFront:self]; 
    [tmpViewController release]; 
} 

모든 것이 잘 작동, 그것은 올바른 창을 표시합니다. 그러나 이상한 부분은 메인 페이지에서 로그 아웃하고 다시 로그인하고 다시 로그 아웃 할 때 발생합니다. 로그인 창이 한 번 표시되는 대신 여러 번 실행하면 2 번이 그립니다. 로그인 프로세스를 계속하면 두 번째 시도에서 2 번 기본 창이 나타납니다. 다시 로그 아웃하면 4 개의 계단식 로그인 창이 표시되고 5 개 또는 7 개의 기본 창이 표시됩니다. 모든 창이로드되면 모든 여분의 윈도우가 하나씩 파괴되기 시작합니다. 새 창을 만들면 모든 이전 창을 그려 넣은 다음 새 창을 그린 다음 이전 창을 모두 파기하는 것처럼 보입니다. 나는 그것이 왜 일어나는 지 모른다. 도움이 필요하십니까? 고객의 클릭이 로그 아웃 할 때 여기에

내 메인 컨트롤러의 코드입니다 :

if ([users verifyUser]) { 
     [settings set:@"isLoggedIn" value:@"Yes"]; 
     [loginView removeFromSuperview]; 
     [[self window] orderOut:self]; 
     [[NSNotificationCenter defaultCenter] postNotificationName:@"NSUserLoggedInNotification" object: self userInfo: nil]; 
    } 

I "가 닫을 때 출시"한 모두 체크 해제 : 로그인 컨트롤러 같은 일이

-(IBAction)logOutClick:(id) sender 
{ 
    [settings set:@"isLoggedIn" value:@"No"]; 
    [[self window] orderOut:self]; 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"NSUserLoggedOutNotification" object: self userInfo: nil]; 
} 

창문.

답변

0

로그 아웃 할 때마다 새 nsnotification 센터 옵저버를 추가했습니다.
그게 문제였습니다.