错误: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]; }