我正在开发一个包含通知中心小部件(或今日扩展)的优胜美地应用程序。我有一个框架,我在其中存储所有共享代码和资源,其中包括一些图像。NSImage
无论我只是使用 PNG 还是资产目录,如果我只使用标准方法,它们都不会加载imageNamed:
。查看文档,这显然是意料之中的——它只在主包中查看。
在 iOS 上,UIImage
有一种新方法,imageNamed:inBundle:compatibleWithTraitCollection:
非常适合这个问题。我没有看到任何类似的东西NSImage
。
似乎最好的选择是做这样的事情:
[[NSBundle bundleForClass:[self class]] imageForResource:@"name"];
这样做的主要问题是它不使用缓存。为了做到这一点,我在一个类别中添加了我自己的方法:
+ (NSImage *)imageNamed:(NSString *)name inBundle:(NSBundle *)bundle {
NSImage *image = [NSImage imageNamed:name];
if (image == nil) {
image = [bundle imageForResource:name];
[image setName:name];
}
return image;
}
这似乎没问题,但有更好的解决方案吗?