2010-04-30 25 views
4

我有一個Cocoa應用程序與服務器交互並顯示一個GUI。如果發生致命錯誤,我會顯示警報並退出。我希望將退出狀態設置爲非零值以反映出現錯誤,以便與其他基於UNIX的工具輕鬆交互。任何設置Cocoa應用程序退出狀態的好方法?

不幸的是,我一直無法找到一個好辦法 - NSApplication似乎沒有任何方法來設置退出狀態。目前,我已經分類NSApplication並添加了一個exitStatus伊娃(我必須在我的應用程序委託中設置),然後重寫-terminate:,以便它調用exit(exitStatus)。這工作正常,但它似乎有點gr to,更不用說我可能會錯過標準terminate:在幕後做的重要事情。我不能在我的子類方法中調用[super terminate:sender],因爲那個exit()沒有給我一個設置狀態的機會。

我錯過了一些明顯的東西嗎?

+4

只需調用exit(3) - 實際上甚至沒有理由調用其他任何東西。操作系統將根據需要清理所有內容。你可能想要等待的唯一原因是你/你做了什麼特別的事情,例如很好地關閉套接字,斷開用戶連接,清理自己的臨時文件,銷燬信號燈等等。但是,你可以在atexit鉤子無論如何... – 2010-04-30 03:36:31

+0

謝謝傑森。我仍然希望我的委託獲得'-applicationShouldExit:'和朋友,因此我的子類。但是很高興知道標準的'-minminate:'發生的任何事情都不是什麼大不了的事情。 – user329441 2010-04-30 03:54:24

回答

5

總之,你要麼打電話exit(3)和完全繞過標準可可推倒機制你不要設置退出代碼(不通過箍跳你描述。

賈森提到,在應用拆卸過程中,系統沒有任何關鍵的。另一方面,您的應用可能有一些關鍵的東西,但這完全是因爲您的應用的實現(而不是Cocoa中的任何東西默認)

但是,真的,不要這樣做 - 用戶的愛強迫qu無論如何,你的應用程序應該設計成不會由於這個災難性的失敗。

1

還有其他更清潔的方法與基於unix的工具進行交互。例如,您可以通過在文本文件中編寫一些代碼來模擬退出代碼,這些工具可以從中獲取代碼,而不會破壞應用程序以返回代碼。也可以使用應用程序的stdout /控制檯。

相關問題