【问题标题】:Multiwindows problem, cocoa多窗口问题,可可
【发布时间】:2011-08-27 20:51:48
【问题描述】:

我有一个简单的应用程序,不是基于文档的。我想要一个允许人们登录或添加用户的登录窗口,当他们成功登录时,我希望它加载主页。如果从主页单击注销,它应该会破坏主页并带您回到登录页面。 听起来像一个简单的计划,但由于某种原因我遇到了问题。

按照我现在的方式,我在主文件 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];
    }

我为两个窗口都选中了“关闭时释放”。

【问题讨论】:

    标签: cocoa nswindow


    【解决方案1】:

    我每次注销时都添加了新的 nsnotification 中心观察者。
    这就是问题所在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      相关资源
      最近更新 更多