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