5

我们收到此类错误消息:

无法加载从具有标识符“com.company.OurResourceBundle”的捆绑包中的笔尖引用的“iconStatus”图像。

基本上,我们将一堆图像放在 xcassets 文件夹中(适用于非捆绑加载的案例)。xcassets 和 nib 文件被打包到一个资源包中。

当应用程序启动时,

  1. nib 文件中的 uiimageview 无法加载任何带有上述错误消息的图像。
  2. [UIImage imageNamed:@"OurResourceBundle.bundle/iconStatus"] 返回 nil

问题与“如何在 NSBundle 中从 Assets.car(xcassets 的编译版本)加载图像? ”有关,但我们不使用 CocoaPods。

4

3 回答 3

9

在 iOS 7 中,除了 Xcode 编译到主包中的文件之外,无法从任何 .car 文件中加载图像。Apple 开发人员在https://devforums.apple.com/message/968859#968859确认了这一点:

不幸的是,除了 Xcode 编译到你的主包中的那个之外,不可能从任何汽车文件中加载图像,因为 +imageNamed: 不接受包参数,这是这样做所需要的(即使那样它也只会能够在单个捆绑包中打开单个资产目录)。

在 iOS 8 中,有一种新方法似乎可以满足您的需求:

+ (UIImage *)imageNamed:(NSString *)name inBundle:(NSBundle *)bundle
    compatibleWithTraitCollection:(UITraitCollection *)traitCollection
于 2014-10-10T23:35:45.160 回答
0

你必须定义你的包

  imageView.image = UIImage(named: "iconName", in: Bundle.main, compatibleWith: nil)
于 2020-04-21T14:10:11.237 回答
-1

我怀疑如果您的图像资产文件夹被压缩成 .car 文件,那么 NSBundle 将知道如何在其中搜索资产。尝试从您的资源包创建一个新包。然后向该捆绑包询问图像的路径。最后从该路径创建一个图像。这是我们在将图像资产和本地化字符串与我们的静态库捆绑时采用的一种方法。我们的版本涉及更多一点,因为它会自动处理 @2x 和 ~ipad 图像之类的东西,但这就是它的要点。

    NSBundle *myBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"your bundle" ofType:@"bundle"]];
    NSString *filePath = [myBundle pathForResource:@"icon" ofType:@"png"];
    UIImage *image = [UIImage imageWithContentsOfFile:filePath];
于 2014-05-05T15:12:12.820 回答