我有一个简单的应用程序,而不是基于文档。我想有一个登录窗口,允许用户登录或添加一个用户,并且当他们登录成功时,我想让它加载主页面。如果从主页面单击注销,它应该销毁主页面并将您带回登录页面。 听起来像一个简单的计划,但由于某种原因,我有一个问题。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];
}
我已经“关闭时被释放”两个勾掉视窗。