UIImage在主bundle中加载了错误的图像



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

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

代码是在AppDelegate didFinishLaunchingWithOptions编写的。

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

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

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

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

到目前为止,只有更改 bundleId(主捆绑包)的方法才能暂时解决问题。

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

我真诚地向你祈求一位伟大的上帝的帮助。谢谢~

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

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

我在苹果开发者论坛上提出了同样的问题,并找到了问题的关键提示。

相对于问题 Cocoapods 复制资源脚本的问题会覆盖默认的 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 添加了任何xcassets文件,则条件XCASSET_FILES将得到满足。

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

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

如果你想从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"];

参考这里

我遇到了一些同样的情况。而不是您上面提到的两个捆绑包,我未能显示具有确切正确名称的正确图像。最后,我发现关键点是图像的后缀是jpg而不是png。我换了个png的形象,一切都变好了。也许这是你可能发生的情况。试一试,祝你好运。:)

PS:这里有一个相关链接作为参考。

最新更新