2017-06-30 138 views
0

我正在使用Swift在Cocoa應用程序上工作。應用程序將打開一個窗口,用戶可以使用菜單打開另一個窗口。問題是,當使用紅色按鈕關閉任一窗口時,應用程序終止。我不想要那種行爲;我希望應用保持活力。它不會崩潰; AppDelegate的applicationWillTerminate方法執行。可可應用程序:如何關閉窗口而不終止應用程序?

的AppDelegate中有方法applicationShouldTerminateAfterLastWindowClosed,它返回假,但這種方法從未得到執行。

我是一個合理的Swift iOS開發人員;這是我第一個真正的可可應用程序,我懷疑這很簡單,但我現在很困惑。如何在不終止應用程序的情況下關閉窗口?

編輯:下面是一些代碼段:

在AppDelegate中:

func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { 
    Log.methodEnter() 
    return false 
} 

另外在AppDelegate中,打開一個窗口的方法:

@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還是僅使用帶有Xib文件的AppDelegate。 –

+2

我剛剛在Xcode中創建了一個默認的Cocoa應用程序,並運行它,當我關閉窗口時,它不會退出 - 所以這聽起來像是你正在做的事情。你的計劃是什麼?我們可以看到源代碼嗎? – Ssswift

+0

當我開始編寫這個應用程序,它的工作,但是當我添加第二個窗口時,終止行爲開始。所以它必須與第二個窗口有關,但我肯定不知道它是什麼!爲了響應El Tomato,第二個窗口是NSWindow,它由NSWindowController子類控制,並使用.XIB文件。 – johnz

回答

0

我在回答這個問題不是有些尷尬;它與可可或我的代碼無關。

我有一個名爲RedQuits一個應用程序,配置OS X時,該應用程序的最後一個窗口關閉,關閉一個應用程序,而不是留下一個沒有窗戶(OS X默認行爲)上運行的應用程序。當我擺脫RedQuits並重新啓動以便OS X恢復到其默認行爲時,問題就消失了。出於某種原因,當任何應用程序窗口關閉時,RedQuits會導致我的Cocoa應用程序退出。有趣的是,我發現這是因爲它在Xcode中導致相同的行爲:關閉一個項目窗口並關閉Xcode。