2011-09-21 29 views
3

在我的iOS應用中,我從網上下載內容到我的/ Library/Caches目錄中。我想將此目錄表示爲NSBundle,以便與我們使用的一些外部API更好地兼容。 (這樣的話,我們可以簡單地改變[一個NSBundle mainBundle] pathForResource ...]至[myBundle pathForResource ...]每當它出現。)純資源NSBundle:這是猶太教嗎?

下,似乎很好地工作:

NSArray* paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
NSString* cachesDirectory = [paths objectAtIndex:0]; 
NSBundle* bundle = [NSBundle bundleWithPath:cachesDirectory]; 

更好但是,該軟件包反映了我對/ Library/Caches目錄所做的任何更改。但是,我擔心,因爲緩存目錄在技術上不是每個Apple's docs的捆綁包。也就是說:

  • 它不是一個「具有標準化層次結構的目錄,其中包含可執行代碼和該代碼使用的資源」,因爲沒有代碼。
  • 它既不是應用程序,框架也不是插件包。
  • 它最像一個應用程序包,但它不包含所需的Info.plist或可執行文件。

我無法在這種動態創建的資源綁定中找到任何地方。這可以嗎?

回答

2

是的,擁有僅限資源的捆綁包絕對沒問題。一些引用預存iOS的verbage。在OS X中,您可以動態加載可執行代碼,這在iOS中已被明確排除。

本地化是僅資源綁定的示例。


編輯:

Bundle Programming Guide說:

雖然文檔格式可以利用光纖束結構來 組織他們的內容,文件一般不認爲是純粹意義上 束。無論其內部格式如何,作爲 目錄實施並被視爲不透明類型的文檔都被認爲是文檔 包。有關 文件包的更多信息,請參閱「Document Packages」。

它說:

有幾種方式來訪問文件包的內容。 由於文檔包是一個目錄,因此可以使用任何適當的文件系統例程來訪問文檔的內容 。如果 對文檔包使用包結構,則還可以使用 NSBundle或CFBundleRef例程。捆綁結構的使用 特別適用於存儲多個 本地化的文檔。

還注意到蘋果一直在說,儘管現在的路徑API無疑會繼續適用於更多的主要操作系統版本,但它已經在儘量減少使用「path」/ NSString APIs來支持URL API。

+0

這是專門記載在任何地方,但?如果沒有得到蘋果的批准,我會猶豫不決,因爲未來可能會發生變化。 – Archagon

+0

編輯包含一些蘋果verbage – bshirley

+0

謝謝你的鏈接!不過,我並不完全確定Apple使用「文檔包的捆綁結構」的含義。這聽起來像是他們想要在目錄中額外添加一些東西,但沒有指定什麼。 – Archagon

2

/Library/Caches目錄將缺少某些軟件包中所需的某些標準文件,如Contents/目錄或Contents/Info.plist文件,因此在將其視爲一個文件時可能無法正常運行。謹慎行事。