在OS X Yosemite(10.10)中从框架加载图像的最佳方法是什么?

时间:2014-08-02 03:01:21

标签: cocoa nsimage nsbundle osx-yosemite

我正在开发一个包含通知中心窗口小部件(或今日扩展程序)的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;
}

这似乎没问题,但是有更好的解决方案吗?

1 个答案:

答案 0 :(得分:2)

当前没有API在一个方法调用中执行此操作,但我刚刚提交了radar:// 25632204以请求添加+[NSImage imageNamed:inBundle:]以便与UIKit进行奇偶校验。