我有一個簡單的應用程序,而不是基於文檔。我想有一個登錄窗口,允許用戶登錄或添加一個用戶,並且當他們登錄成功時,我想讓它加載主頁面。如果從主頁面單擊註銷,它應該銷燬主頁面並將您帶回登錄頁面。 聽起來像一個簡單的計劃,但由於某種原因,我有一個問題。Multiwindows問題,可可
我把它現在的樣子,我檢查,如果用戶登錄或沒有在主文件中的AppDelegate並加載不同的窗口控制器。當客戶登錄時,我從Login Conntroller發回一個通知給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];
}
一切正常,它會顯示正確的窗口。但是當我從主頁面註銷時,奇怪的部分發生,再次登錄並再次註銷。如果我多次執行此操作,而不是向我顯示1個登錄窗口,則會顯示2.如果我繼續登錄過程,則在第二次嘗試時會顯示2個主窗口。如果我再次註銷,我會看到4個級聯登錄窗口,然後我看到5或7個主窗口。在所有的窗口被加載後,所有額外的窗口開始逐一被破壞。它看起來像是當新窗口被創建時,它繪製所有舊窗口,然後是新窗口,然後銷燬所有舊窗口。我不知道爲什麼會發生。想要一些幫助。
這裏是我的主控制器的代碼時,客戶點擊註銷:
-(IBAction)logOutClick:(id) sender
{
[settings set:@"isLoggedIn" value:@"No"];
[[self window] orderOut:self];
[[NSNotificationCenter defaultCenter] postNotificationName:@"NSUserLoggedOutNotification" object: self userInfo: nil];
}
爲登錄控制器同樣的事情:
if ([users verifyUser]) {
[settings set:@"isLoggedIn" value:@"Yes"];
[loginView removeFromSuperview];
[[self window] orderOut:self];
[[NSNotificationCenter defaultCenter] postNotificationName:@"NSUserLoggedInNotification" object: self userInfo: nil];
}
我已經「關閉時被釋放」兩個勾掉視窗。