2016-10-06 10 views
0

問題があります。 私のmac osxアプリで私はメインウィンドウを持っています。このウィンドウは最初に開きます。私はストーリーボードで働いています。 しかし、ユーザーが再びアプリにログインする必要があるときがあります。この場合(例えば、セッションの終了時)私はこのコードでモーダル新しい小さなウィンドウを開きます。モーダルで別のウィンドウを開いた後にウィンドウを閉じることができません

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

[OK]を、私は問題を発見した...

私はNSWindowControllerwindowDidLoad()機能の内のコード機能openLogin()と呼ばれます。問題は、appDelegateのapplicationDidFinishLaunchingが、最初にwindowDidLoad関数が終了した後に呼び出されることです。これは論理的に正しいものです。

ウィンドウをモーダルで実行してmainThreadを停止しました。アプリが起動プロセスを完了する前に、何とかフレームワークがこれを気に入らない。

NSNotificationCenterを使用してこれを解決し、通知名NSApplicationDidFinishLaunchingを確認します。その上でopenLogin()コードを実行します。

関連する問題