我正在开发一个包含通知中心窗口小部件(或今日扩展程序)的Yosemite应用程序。我有一个框架,我将存储我的所有共享代码和资源,其中包括一些图像。无论我只是使用PNG还是资产目录,如果我只使用标准的NSImage
方法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;
}
这似乎没问题,但是有更好的解决方案吗?
答案 0 :(得分:2)
当前没有API在一个方法调用中执行此操作,但我刚刚提交了radar:// 25632204以请求添加+[NSImage imageNamed:inBundle:]
以便与UIKit进行奇偶校验。