2016-10-06 7 views
0

Ich habe ein Problem. In meiner Mac OSX App habe ich ein Hauptfenster. Dieses Fenster öffnet sich initial. Ich arbeite mit Storyboard. Aber es gibt Momente, in denen der Benutzer sich erneut in die App einloggen muss. Wenn dies der Fall ist (zum Beispiel, wenn die Sitzung beendet) Ich öffne ein neues kleines Fenster modal mit diesem Code:Fenster kann nicht nach dem Öffnen eines anderen Fensters modal

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

, nachdem ich einmal dieses Fenster geöffnet und wieder schließen kann ich nie das Hauptfenster schließen. Wenn das Anmeldefenster nie geöffnet wurde, gibt es kein Problem und ich kann das MainWindow schließen. Aber wenn ich das Anmeldefenster einmal geöffnet habe, kann ich das Hauptfenster nicht schließen. Ich kann auf den Schließen-Knopf klicken, aber es tut nichts.

Und ich kann nicht garantieren, dies aber, denke ich, dass ich kein Fenster danach schließen.

Haben Sie eine Idee?

Vielen Dank für Ihre Hilfe!

Artur

+1

Docs sagen: „Sie können die modalen Schleife verlassen, indem Sie die stopModal, stopModalWithCode :, oder abortModal Methoden aufrufen“. Machen Sie eines dieser Dinge, wenn Sie das modale Fenster schließen? –

+0

Ja, ich habe. Danke für diesen Hinweis. Ich beschrieb das Problem in meiner Antwort. –

Antwort

0

Ok, habe ich das Problem gefunden ...

ich den Code Funktion openLogin() innerhalb der windowDidLoad() Funktion des NSWindowController genannt. Das Problem ist, dass die applicationDidFinishLaunching der AppDelegate zuerst nach der windowDidLoad Funktion aufgerufen wird, die logisch korrekt ist.

Ich habe den mainThread gestoppt, indem ich ein Fenster modal ausgeführt habe. Irgendwie gefällt es dem Framework nicht, bevor die App den Startprozess abgeschlossen hat.

Ich löste dies mit der NSNotificationCenter und beobachten Sie den Namen der Benachrichtigung NSApplicationDidFinishLaunching. Darauf laufe ich den Code openLogin().

Verwandte Themen