错误:CUICatalog:提供的资源名称无效:(空)或无效的比例因子:2.000000

TableViewApplication[1458:70b] CUICatalog: Invalid asset name supplied: (null), or invalid scale factor: 2.000000 

在使用TableViewController时获取此警告。 如何纠正这个错误,哪个块受到影响?

这个人出现时,有人试图把nil最终在[UIImage imageNamed:]

[UIImage imageNamed:]添加符号断点 符号断点示例

在iPhone设备上添加$arg3 == nil条件(在模拟器上)或$r0 == nil条件
运行您的应用程序,看看问题仍然存在

利润

这个错误(通常)发生在你试图用[UIImage imageNamed:myImage]加载图像,但iOS不确定是否myImage实际上是一个NSString ,然后你有这个警告。

你可以用下面的方法解决

 [UIImage imageNamed:[NSString stringWithFormat:@"%@", myImage]] 

或者你可以简单地检查UIImage名称的length

 if (myImage && [myImage length]) { [UIImage imageNamed:myImage]; } 

由于错误是抱怨你给的名字是(null) ,这很可能是由调用[UIImage imageNamed:nil] 。 或者更具体地说,传入一个variables没有被设置,所以它nil 。 当使用stringWithFormat:将摆脱错误,我认为这是一个很好的机会,它不是真正做你想做的。 如果您提供的名称是一个nil值,那么使用stringWithFormat:会导致它查找字面上名为“(null)”的图像,就像调用[UIImage imageNamed:@"(null)"]

像这样的东西可能是一个更好的select:

 if (name) { UIImage *image = [UIImage imageNamed:name]; } else { // Do something else } 

你可能想在Xcode中设置一个断点,在“Do something else”行,帮助你找出为什么这个代码首先被调用一个nil值。

在Xcode 6.4中,这似乎发生在使用“Selected Image”作为故事板中的标签栏项目时,即使它是有效的图像。

在这里输入图像说明

实际上,这实际上并没有设置选定的状态图像,因此需要在“用户定义的运行时属性”中进行定义,并从选项卡栏的“SelectedImage”属性中移除

在这里输入图像说明

在我的情况下,我正在传递[UIImage imageNamed:@“”]这导致我显示警告。 只需在所有使用了imageNamed的行上添加断点,然后在debugging行中find警告。

我刚刚解决了这个错误。 只要检查[UIImage imageNamed:(NSString*) imageName]函数的用法。 如果imageName nil ,则会发生错误。

该错误的原因是将一个零值传递给“imageNamed:”方法。 为了避免这种情况,当你尝试传递nil值时,你可以隐藏你的imageView。 在UITableView中重用imageViews或者在scrollViews中可能会出现这种情况。

我避免了下面的检查警告:

 UIImageView *your_image_view; NSString *imageName; if(imageName && imageName.length){ your_image_view.hidden = NO; your_image_view.image = [UIImage imageNamed:imageName]; } else { your_image_view.hidden = YES; } 

我得到这个警告,当我加载图像使用[[UIImage imageNamed:normalStr] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] ,比我更改为[UIImage imageNamed:normalStr] ,警告消失了。

一种方法是使用自己的实现replace[UIImage imageNamed:]类方法,然后检查实现中的图像名称。 请参阅以下内容:

如何调整iOS上的类方法?

我在我的UIImage(Debug)类中实现了这个:

 + (UIImage *)db_imageNamed:(NSString *)imageName { if ([imageName length] == 0) { NSLog(@"breakpoint here"); } return [self db_imageNamed:imageName]; // not a recursive call here after swizzling } 

你也许想[UIImage imageNamed:inBundle:compatibleWithTraitCollection:]

您提供了一些无效的图像名称,所以需要validation之前,你可以做任何上述的方式,无论你的代码或像

 if (iconImageName && [iconImageName length]) { [UIImage imageNamed:iconImageName]; } else { iconImageName.hidden = YES; } 

希望它会帮助!

也许你可以用这个来确认“imageName”不是“nil”;那么你将会离开这个警告。

  if (imageName) { self.imageView.image = [UIImage imageNamed:imageName]; }