2017-06-30 26 views
0

私はSwiftを使ってCocoaアプリを開発しています。アプリはウィンドウで開き、ユーザーはメニューを使用して別のウィンドウを開くことができます。問題は、いずれかのウィンドウが赤いボタンを使用して閉じられると、アプリケーションが終了することです。私はその行動を望んでいません。私は、アプリを生き残らせたい。それはクラッシュしない。 AppDelegateのapplicationWillTerminateメソッドが実行されます。Cocoaアプリ:アプリを終了せずにウィンドウを閉じるには?

AppDelegateには、falseを返すapplicationShouldTerminateAfterLastWindowClosedメソッドがありますが、このメソッドは決して実行されません。

私は合理的に有能なSwift iOS開発者です。これは私の最初の本物のCocoaアプリであり、これは単純なものだと思われますが、今私は困惑しています。アプリを完全に終了せずにウィンドウを閉じるにはどうすればよいですか?

編集:ここにいくつかのコードスニペットは、次のとおりです。AppDelegateで

AppDelegate、ウィンドウを開くための方法でも
func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { 
    Log.methodEnter() 
    return false 
} 

@IBAction func openVerbSettingsWindow(sender: NSMenuItem) { 
    verbSettingsWindowController.showWindow (nil) 

} 

windowViewControllerから、ウィンドウがロードされて表示されるときに何もしない唯一の方法:

override func windowDidLoad() { 
    super.windowDidLoad() 
    window?.setFrame(NSMakeRect(400.0, 100.0, 950.0, 450.0), display: true) 
} 

私はこれが役立つことを期待しています!

+1

NSViewController、NSWindowController、またはAppDelegateをXibファイルで使用しているかどうかによって異なります。 –

+2

XcodeでデフォルトのCocoaアプリケーションを作成して実行しましたが、ウィンドウを閉じると終了しないので、何かのように聞こえます。あなたのプログラムは何ですか?ソースコードを見ることはできますか? – Ssswift

+0

私はこのアプリの作成を始めたときに機能しましたが、2番目のウィンドウを追加すると、終了動作が開始されました。だから、その2番目のウィンドウとは何かがあるはずですが、私はそれが何であるかは分かりません! El Tomatoに応答して、2番目のウィンドウはNSWindowで、NSWindowControllerサブクラスによって制御され、.XIBファイルが使用されます。 – johnz

答えて

0

私はこの質問に対する答えに少しでも恥ずかしいことはありません。それはCocoaや私のコードとは関係ありません。

私は、アプリを最後のウィンドウが閉じたときにウィンドウを閉じずに閉じる(OS Xのデフォルトの動作)のではなく、アプリケーションを終了するようにOS Xを設定するアプリケーションを持っています。私がRedQuitsを取り除いてOS Xがデフォルトの動作に戻るように再起動したとき、問題はなくなりました。何らかの理由で、アプリケーションウィンドウが閉じると、RedQuitsは私のCocoaアプリケーションを終了させます。興味深いことに、これはXcodeで同じ動作を引き起こすため、これを発見しました.1つのプロジェクトウィンドウを閉じるとXcodeがシャットダウンしました。

関連する問題