从CocoaPods资源束加载映像

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (37)

我正在创建一个私有库,其中包含由库中的组件引用的资源。这个库与使用CocoaPods的应用程序共享。在库的.podspec中,我包含了如下一行:

s.resource_bundles = {'IXMapKitResources' => ['IXMapKit/Resources/*']}

包中的资源之一是包含多个映像集的资产目录,其中之一称为“IXMKAnnotationIcon--正常-意外”。以下代码返回零:

UIImage * image = [UIImage imageNamed: @"IXMKAnnotationIcons-Normal-Accident"];
- (UIImage *) ixmk_imageNamed: (NSString *) name
{
    NSString * IXMKResourceBundleName = @"IXMapKitResources.bundle";
    NSString * resourceName = [NSString stringWithFormat: @"%@/%@", IXMKResourceBundleName, name];

    NSString * imageTypeString = [self ixmk_stringForImageType: imageType];
    NSURL * url = [[NSBundle mainBundle] URLForResource: resourceName withExtension: imageTypeString];

    NSData * imageData = [NSData dataWithContentsOfURL: url];
    if (imageData != nil)
    {
        CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef) imageData);
        CGImageRef imageRef = [self ixmk_imageFromDataProvider: provider imageType: imageType];

        UIImage * image = [UIImage imageWithCGImage: imageRef];

        CFRelease(imageRef);
        CFRelease(provider);

        return image;
    }
    else
    {
        return nil;
    }
}

有以下警告:

我们强烈推荐库开发人员采用资源包,因为可以使用资源属性进行名称冲突。此外,使用此属性指定的资源将直接复制到客户端目标,因此它们不会被Xcode优化。

提问于
用户回答回答于

没有列出的明显解决方案是将CocoaPods生成的包(实际上该文件夹不存在)用作NSBundle

用户回答回答于

事实证明,这是资产目录的问题,而不是CocoaPods或bundle的问题。将图像移出资产目录解决了问题。看起来,苹果不支持次级资源包中的资产目录。

扫码关注云+社区