2012-03-21 36 views
3

在每個崩潰後的獅子,當我啓動應用程序獅子問後恢復你的窗戶,如果我想它來恢復應用程序窗口,因爲它沒有正確地終止最後一次,我該如何禁用?如何防止獅子,以顯示你想要一個崩潰

背景:我開發獅(雪豹)一個Cocoa程序,這是一個科學的應用程序(而不是消費者的應用程序,並在外面只用在家裏,不分配)。
它與一些硬件接口,它崩潰了很多! (我知道我應該讓它不會崩潰,但有很多遺留的C代碼參與,沒有寫得很好的驅動程序和......)。

問題:在每次大跌後的獅子,當我啓動應用程序獅子問我是否要它來恢復應用程序窗口,我怎麼能禁用此?

回答

6

這似乎是工作,但沒有任何記錄它,所以它可能不會在將來的操作系統更新工作:

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"ApplePersistenceIgnoreState"]; 

Preventing Lion from State Save

+0

從http://developer.apple.com/library/mac/#releasenotes/Cocoa/AppKit.html#10_7StateRestoration「忽略現有可恢復州(紐約自2011年初以來的種子) 當用戶默認ApplePersistenceIgnoreState定義,現有的可恢復狀態和無標題文檔將被忽略,新的可恢復狀態和無標題文檔自動保存會被重定向到一個臨時目錄,該目錄的路徑將被記錄到控制檯。此用戶默認設置用於希望以乾淨環境開始的自動化測試,以及進行調試。「 – Ali 2012-03-27 14:55:05

+0

這仍然適用於優勝美地! – 2015-06-03 21:42:58

2

你也可以繼承NSApplication和實施restoreWindowWithIdentifier:state:completionHandler:(見也是Windows Are Restored Automatically in the Document-Based App Programming Guide for Mac;與NSWindows上的兄弟方法不同,此函數返回一個BOOL)。例如,一個屬性preventWindowRestoration添加到您的NSApplication的子類,所以你可以這樣做:

- (BOOL)restoreWindowWithIdentifier:(NSString *)identifier state:(NSCoder *)state completionHandler:(void (^)(NSWindow *, NSError *))completionHandler 
{ 
    if ([self preventWindowRestoration]) return NO; 

    return [super restoreWindowWithIdentifier:identifier state:state completionHandler:completionHandler]; 
} 

你需要在最新的自恢復正在發生的事情之間的權利和applicationWillFinishLaunching:applicationDidFinishLaunching:設置你的財產applicationWillFinishLaunching:。並且不要忘記在Info.plist中指定您的NSApplication子類作爲主體類。

+0

'-restoreWindowWithIdentifier:...'並不總是在優勝美地裏被調用,所以它不能被可靠地用來防止不幸的恢復。 – 2015-06-03 21:42:45

0

上述答案的工作對我來說(我沒有嘗試默認鍵伎倆,但它似乎並沒有被用於生產使用)。下面是我工作:

在Xcode中,故事板打開的窗口XIB並選擇NSWindow。

顯示實用程序面板(右側彈出)並選擇屬性檢查器(看起來像一個滑塊旋鈕),並取消選中'[]可恢復'和'[]可見在啓動'。

的復原性可以爲窗口中設置創建:

NSWindow* window = ... 
window.restorable = NO; 

我無法找到設置window.visible物業的最佳時機,但對我來說,廈門國際銀行工作設置它。