CUICatalog:无法找到名称为someimage@2x~ipad.png、缩放因子为2、设备类型为1、设备子类型为568的渲染版本。

7

我创建了一个在xcode 5上完美运行的应用程序。但是当我在带有iphone 6模拟器的xcode 6上运行它时,会出现以下错误:

CUICatalog:找不到名称为someImage@2x~ipad.png,比例因子为2,设备类型为568的渲染。

3个回答

4

我知道这可能不是你想要的答案,但我曾经遇到过完全相同的问题,只需将图片名称更改即可解决该问题。

换句话说,我将原始文件复制到同一目录中的另一个文件中,并将其命名为不同的名称。

然后我将这个新文件添加到Xcode项目中并删除了第一个文件。

我修改了代码以反映新图像的名称:

   // Asset Catalog problem loading this:
   //  [imgBackground setImage:[UIImage imageNamed:@"Home_BG@5g.png"]];
   [imgBackground setImage:[UIImage imageNamed:@"Home_BG-568h"]];

我稍微改变了之前开发者的命名规则,使用 Home_BG-568h@2x.png
希望这能对某些人有所帮助。

谢谢你的回复。我已经找到了解决我的问题的方法。 - Saggy
1
在我的应用中,我不得不在 iPhone 6 和 iPhone 6+ 上使用 @2x~ipad 图像,出于某种目的。但是它无法识别这些图像。所以我只是将这些图像重新命名,并添加了非标准类型扩展名,比如“-hd”。现在它完美地工作了! - Saggy
有没有办法在不重命名资源的情况下避免这个错误?我们有数百个图标资源都被命名为 Icon@57x57.png 等等。重命名它们是完全不切实际的。在 iOS 8 之前,这一切都运作得非常完美。 - devios1
@devios,我理解你的沮丧,但这是苹果的问题,而不是我的。显然这是他们软件中的一个漏洞。如果我有更优雅的解决方案,我会发布它,但遗憾的是,我没有。我在继承的项目中仍然遇到这个问题,也没有其他解决方案。是的,这需要耗费时间。 - Nate
1
嗨,Nate。事实证明,我找到了一个解决方法,首先将资源加载到NSData中,然后使用该数据初始化UIImage。这会失去imageNamed:的缓存功能,但对于我的目的来说是可以接受的。 - devios1
2
@devios,如果你有时间的话,应该在这里发布作为备选答案。即使OP已经接受了一个答案,随着时间的推移,你的解决方案可能对很多人有用。当然,这是你自己的决定。 - Nate

2

我发现了一种规避苹果命名约定解释的加载图片方法。不要使用[UIImage imageNamed:],而是将图片作为二进制数据加载到NSData中,然后用该数据初始化UIImage,如下所示:

NSData* imageData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon@57x57" ofType:@"png"]];
UIImage* icon = [UIImage imageWithData:imageData];

需要注意的是,使用这种方法不会进行缓存,多次调用将每次加载新的图片。如果需要缓存,必须自行实现逻辑。

另外,图片的比例可能也不正确。如果是retina比例(@2x)的图片,可以像下面这样调整加载后的图片的比例:

icon = [UIImage imageWithCGImage:icon.CGImage scale:2.f orientation:UIImageOrientationUp];

0

我在我的通用应用项目中也遇到了同样的问题。

解决方案是将所有在两个或一个设备上使用的“通用图像”重命名(iPhone&& iPad || iPhone || iPad)。例如,someimage@2x.png,因为不存在也不需要对应项...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接