2010-07-26 40 views
2

我目前正在爲我想創建的文檔制定最佳結構。該文檔基本上是一個使用sqlite作爲存儲的核心數據文檔,但使用Apple提供的NSPersistentDocument + FileWrapperSupport來啓用文件包裝器支持。推薦文檔結構。文件包裝?滾我自己?

該文檔大量使用媒體,如圖像,視頻,音頻文件等可能有1000個文件。那麼我現在要做的是創建一個類似於以下的結構:

/myfile.ext/ 
/myfile.ext/store.sqlite 
/myfile.ext/content/ 
/myfile.ext/content/images/* 
/myfile.ext/content/videos/* 
/myfile.ext/content/audio/* 

現在,首先我就下創建一個臨時目錄,並把我所有的媒體在那裏的路線。基本上創建的路徑和文件名'/content/images/image1.jpg',因爲我希望它們出現在保存的文件包裝中,然後保存時我試圖將這些全部複製到文件包裝器中...

什麼我發現這些文件確實被複制到了我想要的文件結構的包裝中,但是當實際的包裝被保存時,這些文件全部都神奇地消失了。

太好了。

所以,我拋棄了我現有的解決方案,並嘗試使用文件包裝代替。此解決方案涉及在創建新文檔時創建內容包裝文件目錄,或在打開文檔時加載內容目錄文件包裝。

當圖像被添加/修改時,我在這個根內容包裝器中創建了必要的目錄包裝器(如圖像目錄包裝器,如果它尚不存在的話,或任何其他需要創建的中間目錄包裝器)和然後爲媒體創建常規文件包裝,如果有文件名,則刪除該文件名的任何現有包裝。

保存文檔只是確保將內容文件包裝添加到文檔文件包裝並保存文檔。

呃......它的確如此。第一次。但是,任何嘗試進行任何後續更改(即添加圖像)都會保存。然後替換圖像,保存。沒有按預期行事,只顯示第一次保存的圖像。

所以,我的問題是......首先,上述方法中的哪一個是正確的,如果在所有的,而我在做什麼錯認爲他們失敗。

其次,正如我期望管理1000張圖像一樣,正在使用文件包裝器來處理事情的正確方法。

回答

0

隨着遊戲這麼多的媒體,你應該很可能給你的用戶通過媒體是否駐留在文件中或只對媒體的引用文檔中包含的,和媒體位於別處,比如在圖書館控制/庫由應用程序管理的。然後,他們可以節省一個(可能多倍大)的副本,解決所有參考。

您可能想壓縮/解壓任何目錄,以免用戶試圖將文檔附加到電子郵件中時感到困惑。我相信iWork一直在用它的文檔包做一段時間。

至於你做錯了什麼,沒有人能說,因爲你沒有提供任何代碼演示你在做什麼。

你爲什麼不創建一個一次性的應用程序,讓您選擇磁盤上的文件,並保存這些文件使用文件包的文件嗎?這樣可以讓您在不受應用程序中其他問題干擾的情況下處理此功能。一旦你瞭解瞭如何使用文件包裝器,你可以將代碼移回或者編寫新的代碼。