2011-06-25 48 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"];