2011-01-27 63 views
2

我正在構建可用於創建「項目」的Mac OS X應用程序。當用戶保存一個項目時,他們將保存許多資源:圖像文件,文本文件,sqlite文件等。NSBundle,它可以用來保存項目文檔嗎?

我可以在文檔中爲每個項目創建一個文件夾,並在該文件夾內放置所有項目資產,並且只包含用於打開項目的單個項目文件。

我讀過關於我想使用的NSBundle。但我只是在應用程序捆綁的情況下閱讀了他們。這樣可以使用NSBundle嗎?用戶只能看到一個文件,並且可以隨意移動它。

使用NSBundle做我想做的事情有意義嗎?還是有另一種方法來做到這一點?

(我是相當新的MacOS X系統編程)

UPDATE

我相信iPhoto中使用這種方法來存儲「iPhoto圖片庫」,這是我想要做什麼我的應用程序,NSBundle我應該看什麼?

+0

許多Apple自己的應用程序使用文檔包。舊版本的iWork創建了未壓縮的捆綁包,iWork '09壓縮了最終捆綁包。 (您可以通過將任何Pages文檔重命名爲* .zip來測試,歸檔實用程序將其解壓縮爲文檔包) – 2011-01-27 10:47:22

回答

4

是的,這是可能的,並在過去的很多應用程序中使用。該方法在this document中描述。一旦在您的應用程序的Info.plist中明確聲明,Finder將顯示生成的包作爲一個文件。

但是,我不建議你這樣做。過去蘋果自己的Keynote使用了捆綁方式,但它不再使用它了。同樣,OmniGraffle(這是一款在OS X上具有悠久歷史的圖表應用程序)使用捆綁包來保存項目,但它也停止了。

原因是雖然Finder將其顯示爲文件,但該包依然被非Apple電子郵件軟件或任何瀏覽器等視爲目錄。例如,如果用戶想要將文檔以捆綁的格式附加到他/她在瀏覽器中的Gmail中撰寫的電子郵件,那將會很糟糕。這讓很多人感到困惑。

所以,這是可能的,但我不推薦它。一種解決方法是將壓縮包用作用戶可見文件,並在用戶將其打開到臨時目錄時將其解壓縮。然後,您可以使用NSBundle和/或NSFileWrapper apis訪問其中的文件。

+0

感謝Yuji,聽到這種方法的背景很有趣。我確實發現你提到的拉鍊方法頗具吸引力。確實,我的應用程序的用戶可能很有興趣與彼此分享他們的工作,並且將來這可能發生在Mac和Windows用戶之間。 – Vamos 2011-01-27 09:09:21

0

NSBundle class表示應用程序包,可用於訪問應用程序中的資源,但對於應用程序數據您可以使用它,而不是用戶數據。

對於每一個你所提到的資源,有保存此類型,以實例的方式,圖像文件,你可以使用的NSData保存圖像數據到磁盤,併爲文本文件,你可以使用的方法writeToFile:atomically:encoding:error:

你很可能想看看核心數據http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/CoreData/cdProgrammingGuide.html),用於管理用戶的數據模型,一個非常好的框架,看看這是否會滿足您的需要。

+0

不只是應用程序包;框架和大多數插件也捆綁在一起。 – 2011-01-27 11:36:09

相關問題