2016-10-06 10 views
0

У меня проблема. В моем приложении mac osx у меня есть mainwindow. Это окно открывается. Я работаю с раскадрой. Но есть моменты, когда пользователю нужно снова войти в приложение. Если это так (например, когда сессия заканчивается) я открываю новый небольшое окно модально с этим кодом:Не удается закрыть окно после открытия другого окна

private func openLogin() { 
    loginController = self.storyboard?.instantiateController(withIdentifier: "LoginController") as? LoginWindowController 
    guard let window = loginController?.window else { 
     return false 
    } 
    NSApp.runModal(for: window) 
} 

после того как я когда-то открыл окно и закройте его снова, я никогда не может закрыть главное окно. Если окно входа в систему никогда не открывалось, проблем нет, и я могу закрыть MainWindow. Но если я однажды открою loginwindow, я не могу закрыть mainwindow. Я могу нажать на кнопку закрытия, но ничего не делает.

И я не могу это заверить, но я думаю, что после этого я не могу закрыть какое-либо окно.

У вас есть идея?

Благодарим за помощь!

Артур

+1

Документы говорят: «Вы можете выйти из модального цикла, вызвав методы stopModal, stopModalWithCode: или abortModal». Вы выполняете какие-либо из этих действий при закрытии модального окна? –

+0

Да, у меня есть. Спасибо за этот намек. Я описал проблему в своем ответе. –

ответ

0

Хорошо, я нашел проблему ...

Я назвал код функции openLogin() внутри windowDidLoad() функции NSWindowController. Проблема в том, что applicationDidFinishLaunching appDelegate будет сначала вызван после завершения функции windowDidLoad, что логически корректно.

Я остановил mainThread, запустив окно модально. Как-то фреймворк не нравится, прежде чем приложение завершит процесс запуска.

Я решил это, используя NSNotificationCenter и соблюдая название уведомления NSApplicationDidFinishLaunching. На этом я запускаю код openLogin().