2016-10-06 8 views
0

문제가 있습니다. 내 맥 OS X 응용 프로그램에서 나는 메인 윈도우를 가지고있다. 이 창은 초기를 여는 중입니다. 나는 스토리 보드로 일하고있다. 하지만 사용자가 앱에 다시 로그인해야하는 경우가 있습니다. 내가 한 번이 창을 연 후모달로 다른 창을 연 다음 창을 닫을 수 없습니다.

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를 한 번 열면 메인 윈도우를 닫을 수 없습니다. 닫기 버튼을 클릭 할 수는 있지만 아무 것도하지 않습니다.

그리고 나는 이것을 보장 할 수는 없지만 그 후에 어떤 창도 닫을 수는 없다고 생각합니다.

의견이 있으십니까?

도움 주셔서 감사합니다.

아르투르

+1

문서에서 "stopModal, stopModalWithCode :, abortModal 메소드를 호출하여 모달 루프를 종료 할 수 있습니다."라고 말합니다. 모달 창을 닫을 때 그 일을합니까? –

+0

예. 있습니다. 그 힌트를 가져 주셔서 감사합니다. 나는 대답에서 그 문제를 기술했다. –

답변

0

좋아, 내가

은 내가 NSWindowControllerwindowDidLoad() 기능의 내부 코드 기능 openLogin()라고 ... 문제를 발견했다. 문제는 windowDidLoad 함수가 완료된 후 appDelegate의 applicationDidFinishLaunching이 먼저 호출된다는 것입니다. 이는 논리적으로 정확합니다.

윈도우를 모달로 실행하여 mainThread를 중지했습니다. 어쨌든 프레임 워크는 앱이 실행 프로세스를 완료하기 전에 이렇게하지 않습니다.

NSNotificationCenter을 사용하여이 문제를 해결하고 알림 이름 NSApplicationDidFinishLaunching을 관찰합니다. 이 코드에서 openLogin() 코드를 실행합니다.