rob*_*cer 7 cocoa nsimage nsbundle osx-yosemite
我正在开发一个包含Notification Center小部件(或Today扩展)的Yosemite应用程序.我有一个框架,我将存储我的所有共享代码和资源,其中包括一些图像.无论我是使用PNG还是资产目录,如果我只使用标准NSImage方法,它们都不会加载imageNamed:.看一下文档,这显然是预期的 - 它只在主要包中查找.
在iOS上,UIImage有一个新的方法,imageNamed:inBundle:compatibleWithTraitCollection:这是完全适合这个问题.我没有看到类似的东西NSImage.
看起来最好的选择是做这样的事情:
[[NSBundle bundleForClass:[self class]] imageForResource:@"name"];
Run Code Online (Sandbox Code Playgroud)
这个问题的主要问题是它不使用缓存.为了做到这一点,我在一个类别中添加了我自己的方法:
+ (NSImage *)imageNamed:(NSString *)name inBundle:(NSBundle *)bundle {
NSImage *image = [NSImage imageNamed:name];
if (image == nil) {
image = [bundle imageForResource:name];
[image setName:name];
}
return image;
}
Run Code Online (Sandbox Code Playgroud)
这似乎没问题,但有更好的解决方案吗?
目前还没有 API 可以在一个方法调用中执行此操作,但我刚刚提交了radar://25632204 来请求+[NSImage imageNamed:inBundle:]添加它以与 UIKit 保持一致。
| 归档时间: |
|
| 查看次数: |
1370 次 |
| 最近记录: |