如果我有一个包含一个类和该类使用的一些资源的包。如果我从包中加载类,我应该如何在该类中加载资源(在我从中加载类的包中)?
假设我想在我的对象中加载一个图像,该图像是从包中加载的类实例化的。如果我做
NSImage *image = [NSImage imageNamed:@"myImage"];
它会从我加载类的位置加载捆绑包内的图像吗?或者它会在应用程序的包中查找加载类和资源的包?
在 OS X 10.7+ 上这样做:
NSBundle *otherBundle = [NSBundle bundleWithIdentifier: @"com.company.otherapp"];
NSImage *imageFromOtherBundle = [otherBundle imageForResource: @"imageName"];
此方法在多个位置搜索命名图像,返回它找到的与给定名称匹配的第一个图像。搜索顺序如下:
- 搜索名称已使用 setName: 方法显式设置且当前位于图像缓存中的对象。
- 在应用程序的主包中搜索名称与指定字符串匹配的文件。(有关如何搜索捆绑包的信息,请参阅捆绑包编程指南中的“访问捆绑包的内容”。)
- 在 Application Kit 框架中搜索具有指定名称的共享图像。在应用程序包中查找文件时,最好(但不是必需)在 name 参数中包含文件扩展名。(关联)
您可以使用+bundleForClass:
class 方法NSBundle
来获取对特定类的包的引用。
然后,您可以使用 的‑pathForImageResource:
方法NSBundle
获取图像的路径并NSImage
使用该路径创建一个。