UIImage加载主包中的错误图像

时间:2016-03-15 10:09:52

标签: ios objective-c iphone uiimage bundle

我有一个包含10个以上捆绑包的主项目。我有两个名为map_bubble_right_normal的图像,一个在主束中,另一个在子束中(SCommon.bundle)。我编写如下代码:

UIImage *image = [UIImage imageNamed:@"map_bubble_right_normal"];

代码是在didFinishLaunchingWithOptions的{​​{1}}中写的。

我想加载我在主包中保存的图像。但是,从子包(SCommon.bundle)加载图像的代码的结果。

我猜在主捆绑中保存的图像可能是错误图像(可能是复制问题)。因此,我显示ipa内容以查看" map_bubble_right_normal"文件保存在根目录下。图像是对的!!!!!

我不知道为什么AppDelegate会从子包(SCommon.bundle)加载图像。我试图删除应用程序并重新启动iPhone,结果是一样的。并且,我尝试删除XCode的派生数据,并清理项目。图像仍然从子包中加载(SCommon.bundle)。

另外,我在iOS 8和iOS 9设备上测试了这个问题。

到目前为止,只有一个更改bundleId(主程序包)的方法才能解决问题。

我知道UIImage的缓存功能,但我不明白为什么奇怪的场景会发生。

我诚挚地请求你一位伟大的上帝寻求帮助。谢谢〜

4 个答案:

答案 0 :(得分:1)

感谢大家的回答。对不起,我误导了所有人捆绑。

我找到了问题的原因。错误图像不是来自Assets.car的子包。实际上,问题的原因应该归咎于物理目录中的Image.assert。 CocoaPods会将所有匹配“* .assets”复制到Assets.car。

我在Apple Developer forum提出了同样的问题,并找到了问题的关键提示。

Cocoapods与问题相关的问题Pods copy resource script overrides default xcasset bahaviour

如果您的Pod Repo添加了任何名称与*.xcassets匹配的文件夹,则Pod_resources.sh脚本会复制Pod_Root中的每个*.xcassets

Pod_resources.sh的密钥代码:

if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ]
   ...
   # Find all other xcassets (this unfortunately includes those of path pods and other targets).
   OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d)
   while read line; do
   if [[ $line != "`realpath $PODS_ROOT`*" ]]; then
      XCASSET_FILES+=("$line")
   fi
   ... 
fi

如果您的Pod已添加任何XCASSET_FILES文件,则条件xcassets将会实现。

答案 1 :(得分:0)

要从主捆绑中加载图片,请尝试以下操作:

UIImage *image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"map_bubble_right_normal" ofType:@"png"]];

答案 2 :(得分:0)

如果您想从mainBundle加载,请尝试以下代码:

NSBundle* myBundle = [NSBundle mainBundle];
NSString* myImage = [myBundle pathForResource:@"Seagull" ofType:@"jpg"];

如果要从子包加载:

NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"YourBundleName" ofType:@"bundle"];
NSBundle *subBundle = [NSBundle bundleWithPath:bundlePath];
NSString* myImage = [subBundle pathForResource:@"Seagull" ofType:@"jpg"];

参考here

答案 3 :(得分:0)

我遇到了同样的情况。我没有使用上面提到的两个捆绑,而是使用正确的名称显示正确的图像。最后,我发现关键点是图片的后缀为jpg而不是png。我改为png的图像,一切都转好了。也许这是你遇到的可能情况。试一试,祝你好运。 :)

PS:这是a related link作为参考。