2011-09-19 109 views
3

我正在嘗試創建一個需要定位到Mac OS X 10.5的Cocoa應用程序。我創建了一個新的Cocoa應用程序,它爲我自動生成第一個窗體。如何在最後一個窗口關閉之前退出應用程序10.6

如果我建,它會工作得很好,直到我改變我的基地SDK 10.5,此時構建失敗,出現「無法找到協議聲明NSApplicationDelegate。」

現在,我知道NSApplicationDelegate是一個10.6的功能。我搜索並發現了其他人只是說刪除NSApplicationDelegate協議。我這樣做,它會構建和運行,但我無法讓應用程序退出。如果我點擊紅色按鈕關閉窗口,它會關閉,但停靠圖標仍然存在。

我懷疑它是做的形式沒有得到/處理退出事件;不過,我是Xcode的新手,所以我不確定窗口代碼應該是什麼樣子,並且找到10.5的示例源已經證明很棘手。

任何人都可以幫助我嗎?提前致謝。

回答

6

現在,我知道NSApplicationDelegate是一個10.6的功能。我搜索並發現了其他人只是說刪除NSApplicationDelegate協議。我這樣做,它會構建和運行,但我無法讓應用程序退出。如果我點擊紅色按鈕關閉窗口,它會關閉,但停靠圖標仍然存在。

這與您是否聲明符合該協議(在10.6以前的SDK中不存在正式協議,這就是您無法使用它的原因)無關。

在Mac,Windows和應用程序是兩回事,所以關閉窗口並退出應用程序同樣是兩個不同的東西。應用程序擁有窗口,因此退出應用程序將關閉其所有窗口(但是,如果應用程序支持Lion的狀態恢復功能,則應用程序下次啓動時它們會恢復)。關閉窗口不會退出應用程序。

然而,對於單一窗口的應用程序,它有一定道理關閉應用程序的主窗口退出應用程序。系統首選項和許多其他單窗口應用程序證明了這一點。

爲了做到這一點,實行從委託的NSApplication協議的方法。

請注意我寫這個的方式。該協議在10.6之前不是正式的協議,但它仍然存在 - 如an informal protocol。你不能聲明符合它,但你仍然可以實現它的方法,NSApplication仍然會發送它的委託代理消息。

您需要您的應用程序的代表通過返回YES來響應applicationShouldTerminateAfterLastWindowClosed:

相關問題