2011-04-26 42 views
1

正確地退出應用程序我一直在試圖解決這個問題的牆上撞我的頭。NSDocumentController在審查未保存的文件在可可/ Objective-C

我的應用使用NSDocument,NSDocumentControllerNSWindowController的子類。問題是當我創建一個文檔並進行修改時,以及如果我以同樣的方式創建多個文檔時,如果我選擇退出而文檔未保存,我會得到正確的對話框以詢問是否要查看未保存的文檔,取消或不保存,但每當選擇查看並保存文檔時,我都會保存,但保存第一個文檔後,首先,該文檔未關閉,並且我沒有要求保存其他文檔。最重要的是,我的應用程序的退出菜單項變灰。

我創建了另一個骨架應用程序來做同樣的事情,當然,一切正常。我在nib文件中檢查了我的連接,並且看不到任何錯誤,或者與測試應用程序不同。雖然我的應用中還有很多。

我目前沒有重寫reviewUnsavedDocumentsWithAlertTitle:cancellable:delegate:didReviewAllSelector:contextInfo:方法,但是當我這樣做時,我遇到了同樣的問題,因爲我在做了一些特殊的清理工作後調用了Super的版本。但是,不是壓倒性的,也會產生相同的結果。

有一件事我注意到,就是在自己的應用程序,我得到以下信息在日誌,因爲我運行它,我並不在我的測試應用程序獲得:

[Switching to process 9997 thread 0x7667] 
[Switching to process 9997 thread 0x903] 

這使得它看起來像我在這裏做了多線程的事情而不知道。我的測試應用程序不會切換到另一個線程。

我不知道如何檢查我的所有連接是否正常以及爲什麼這些線程正在切換到以及它們來自哪裏。

因爲我得到的錯誤是否覆蓋NSDocumentController類似上面的方法或closeAllDocumentsWithDelegate:didCloseAllSelector:contextInfo:我想象錯誤來自其他地方。

也許我的NSDocument子類的保存方法正在創建問題,但是一旦保存發生,它們會返回相應的值,我不會出錯並且文件都很好。

我想重寫-didCloseAllSelector-didReviewAllSelector,但我對此有點質疑。我不知道如何建立該方法,因爲這:

- (void)documentController:(NSDocumentController *)controller 
       didCloseAll:(BOOL)didCloseAll contextInfo:(void *)contextInfo; 
{ 
NSLog(@"All documents closed"); 
} 

永遠不會被調用。這是一個症狀嗎?嘗試相同的-didReviewAllSelecter永遠不會被調用。

回答

2

最後,我重寫了我不應該擁有的「NSDocument」子類中的一個方法。刪除這個固定它。

我想你必須非常小心你重寫!

該方法是writeToFile:ofType:originalFile:saveOperation:我不再需要做。

不確定到底發生了什麼問題,但它可能會幫助其他人知道在那裏看到。

相關問題