10

我正在开发一个包含通知中心小部件(或今日扩展)的优胜美地应用程序。我有一个框架,我在其中存储所有共享代码和资源,其中包括一些图像。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;
}

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

4

1 回答 1

4

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

于 2016-04-08T20:37:49.200 回答