从另一个包中加载资源

时间:2011-06-25 02:06:49

标签: cocoa macos bundle nsbundle

如果我有一个包含该类和该类使用的一些资源的包。如果我从bundle中加载类,我应该如何在该类中加载资源(在我加载类的bundle中)?

假设我想在从包中加载的类实例化的对象中加载图像。 如果我做

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

它会从我加载类的地方加载包内的图像吗?或者它会查看使用类和资源加载bundle的应用程序包吗?

3 个答案:

答案 0 :(得分:7)

在OS X 10.7+上执行此操作:

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

答案 1 :(得分:3)

  

此方法搜索命名图像   在几个地方,返回第一个   找到匹配给定的图像   名称。搜索顺序为   如下:

     
      
  1. 搜索名称为的对象   使用setName显式设置:   方法,目前居住在   图像缓存。
  2.   
  3. 搜索应用程序   主要包用于名称的文件   匹配指定的字符串。 (对于   有关捆绑如何的信息   搜索,请参阅“”访问捆绑包   捆绑编程中的内容“”   指南。)
  4.   
  5. 搜索应用程序工具包   用于共享图像的框架   指定的名称。寻找文件时   在应用程序包中,它是   更好(但不是必须)包括   名称中的文件扩展名   参数。 (Link)
  6.   

答案 2 :(得分:0)

您可以使用+bundleForClass:的{​​{1}}类方法来获取特定类的包的引用。

然后,您可以使用NSBundle的{​​{1}}方法获取图片的路径,并使用该路径创建‑pathForImageResource: