Многооконная проблема, какао - PullRequest
0 голосов
/ 24 августа 2011

У меня есть простое приложение, не основанное на документах.Я хочу иметь окно входа в систему, которое позволяет людям входить в систему или добавлять пользователя, и когда они вошли в систему успешно, я хочу, чтобы он загружал главную страницу.Если с главной страницы вы нажимаете кнопку «Выйти», она должна уничтожить главную страницу и вернуться на страницу входа.звучит как простой план, но у меня почему-то есть проблема.

Как у меня сейчас получается, я проверяю, вошел ли клиент в основной файл 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];
}

Все отлично работает, отображается правильное окно.Но странная часть случается, когда я выхожу с главной страницы, снова захожу и снова захожу.Если я делаю это несколько раз, вместо того, чтобы показывать мне 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];
    }

У меня «Выпускается, когдазакрыто "проверено для обоих окон.

1 Ответ

0 голосов
/ 26 августа 2011

Каждый раз, когда я выхожу из системы, я добавлял нового наблюдателя в центр уведомлений.
В этом и была проблема.

...