2011-06-25 52 views
3

如果我有一個包含該類所使用的類和一些資源的包。如果我從bundle中加載類,應該如何加載該類中的資源(位於從中加載類的包中)?從另一個軟件包加載資源

比方說,我想從我的對象中加載一個圖像,該對象是從從包中加載的類實例化的。 如果我做

NSImage *image = [NSImage imageNamed:@"myImage"]; 

將其加載這就是從那裏,我從加載的類的包內的圖像?還是會查看加載了類和資源的應用程序包?

回答

3

此方法搜索名爲圖像 在幾個地方,返回第一 圖像找到匹配給定 名。搜索的順序爲 如下:

  1. 搜索對象的名字被 設定明確使用的setName: 方法,目前居住在 圖像緩存。
  2. 在應用程序的 主文件夾中搜索名稱爲 的文件與指定的字符串匹配。 (有關如何在bundle 搜索,請參見「‘訪問一個包的 內容’」捆綁編程 指南。 信息)
  3. 搜索應用套件 框架與 指定名稱的共享圖像。當在應用程序包中查找文件 時, 更好(但不是必需的)將 的文件擴展名包含在名稱 參數中。 (Link)
+1

那麼,你如何你會加載它在這種情況下? 1)不適用,因爲圖像之前尚未加載(它不在緩存中)2)不適用,因爲它位於單獨的包中,而不是主包3)它不是一個appkit框架。 – thealch3m1st

+1

創建一個'NSBundle'實例。獲取文件路徑。加載圖像。 –

+0

但我有一個對象,從一個從該包加載的類實例化。我是否創建了該類所在的同一個包的NSBundle實例,並從該包中加載圖像?如果這個類在一個bundle中,我該如何在這個類中定義的方法中加載包含這個類的bundle? – thealch3m1st

0

您可以使用NSBundle+bundleForClass:類的方法獲取特定類的包的參考。

然後,您可以使用NSBundle‑pathForImageResource:方法獲取圖像的路徑並使用該路徑創建NSImage

5

在OS X 10.7以上版本做這個做:

NSBundle *otherBundle = [NSBundle bundleWithIdentifier: @"com.company.otherapp"]; 
NSImage *imageFromOtherBundle = [otherBundle imageForResource: @"imageName"];