2012-11-09 56 views
1

我有一個nsdocument子類,它處理二進制文件(現有格式,而不是我的創建)的加載。文件格式使用3個具有相同名稱的文件邏輯「文件」(具有不同的擴展名)。覆蓋爲NSDocument加載多個文件的方法

我希望能夠讓用戶在NSOpenPanel中選擇3個文件,然後創建一個NSDocument子類並創建相應的窗口。我知道如何設置一個面板以允許選擇多個文件,但我不知道如何進入NSDocumentController正在使用的面板,或者要從多個文件加載二進制數據時覆蓋哪些方法。

+0

你不能覆蓋' - [NSDocumentController runModalOpenPanel:forTypes:]',而無需調用'super'但在運行自己的模式面板?這應該允許你攔截完成來做正確的事情。 – danyowdee

+0

是的,我相信如此,不完全確定如何繼承NSDocumentController,但這超出了這個問題的範圍。感謝您的想法! – jars

+0

您選擇3個文件後是否嘗試過通知,然後按確定? –

回答

1

依靠用戶做事情一些奇怪的正確方法解決你的應用程序自身的侷限性必然會失敗。無論你告訴用戶做什麼,他們都會這樣做,與此相反,所有與之相關的事物都是如此。

我會在我的plist中聲明這三種類型的每一種,並將它們全部路由到相同的文檔類。該文件將從所有三個文件中讀取,而不管它是由哪個文件創建的,並且如果缺少任何文件則返回一個錯誤。您應該指定其中一個作爲文檔的主文件,並將您的fileURL設置爲該文件的URL。

小心地正確實施文件協調(您應該是所有三個文件的主持人,並協調任何嘗試寫入其中任何文件)。如果不這樣做,您將會使用戶面臨數據損壞或丟失的風險。

你不應該試圖混淆Open面板。打開面板不是在基於文檔的應用程序中打開文檔的唯一方法。你需要做的事情,你需要做在你的GUI後面,而不是在它之後。

如果你的應用程序是沙盒,這將是棘手或不可能的。安全範圍的URL書籤可能對您有所幫助。

+1

+1這當然是明智的做法!如果您仍然絕對要訴諸手動選擇,那麼至少使這是一個一次性的唯一的事,和三個文件遷移到一個新的文件包中。這樣,您可以保持內容分離,同時只有一個不透明的文件系統對象供用戶處理。 – danyowdee

+0

感謝彼得的全面回答,並指引我走向正確的方向! – jars