TableViewApplication[1458:70b] CUICatalog: Invalid asset name supplied: (null), or invalid scale factor: 2.000000
使用TableViewController时获取此警告。如何纠正这个错误以及哪个块受到影响?
答案 0 :(得分:189)
当有人试图将nil
放入[UIImage imageNamed:]
为[UIImage imageNamed:]
在模拟器上添加$arg3 == nil
条件,在32位iPhone上添加$r0 == nil
条件,或在64位iPhone上添加$x2 == nil
。
运行您的应用程序并查看调试器将停止的位置。
P.S。请记住,如果图像名称为空字符串,也会发生这种情况。您可以通过在条件中添加[(NSString*)$x2 length] == 0
来进行检查。
答案 1 :(得分:58)
当您尝试使用[UIImage imageNamed:myImage]
加载图片时会发生此错误(通常),但iOS不确定myImage
是否真的是NSString
,然后您会收到此警告。
您可以使用以下方法解决此问题:
[UIImage imageNamed:[NSString stringWithFormat:@"%@", myImage]]
或者您只需检查length
名称的UIImage
:
if (myImage && [myImage length]) {
[UIImage imageNamed:myImage];
}
答案 2 :(得分:21)
由于错误是抱怨您提供的名称为(null)
,因此很可能是通过调用[UIImage imageNamed:nil]
引起的。或者更具体地说,传入一个变量还没有设置,所以它等于nil
。虽然使用stringWithFormat:
可以摆脱错误,但我认为很有可能它并没有真正做你想做的事情。如果您提供的名称是nil
值,那么使用stringWithFormat:将导致它查找字面上命名为"(null)"的图像,就好像您正在调用{{1 }}
这样的事情可能是更好的选择:
[UIImage imageNamed:@"(null)"]
您可能希望在Xcode中设置一个断点"做其他事情" line,以帮助您弄清楚为什么首先使用nil值调用此代码。
答案 3 :(得分:16)
在Xcode 6.4中,当使用“选定图像”作为故事板中的标签栏项目时,即使它是有效图像,也会出现这种情况。
这实际上似乎无法设置所选的状态图像,因此需要在用户定义的运行时属性中定义,并从Tab Bar项的SelectedImage属性中删除
答案 4 :(得分:3)
在我的情况下,我传递了[UIImage imageNamed:@“”],这使我显示警告。只需将断点添加到已使用imageNamed的所有行,然后调试发现警告的行。
答案 5 :(得分:2)
将故事板分成几部分后,这发生在我身上(实际的更改是在我度假时发生的,所以我不知道该怎么做)。
检查情节提要的XML之后,我发现以前在资产目录中指向“ bottomBar”的图像参考指向imageView:fFo-1g-jzs:image
。
在XML文件的<resources>
标签下面是名为<image name="imageView:fFo-1g-jzs:image">
的标签,其中包含一个大的mutableData
blob。
在情节提要中重置图像参考并删除斑点后,错误消失了。
答案 6 :(得分:0)
我刚刚解决了这个错误。只需检查[UIImage imageNamed:(NSString*) imageName]
功能的用法。如果imageName
为nil
,则会发生错误。
答案 7 :(得分:0)
错误的原因是将nil值传递给&#34; imageNamed:&#34;方法。为避免这种情况,您可以在尝试传递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;
}
答案 8 :(得分:0)
我在使用[[UIImage imageNamed:normalStr] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]
加载图片时收到此警告,而我更改为[UIImage imageNamed:normalStr]
,警告已消失。
答案 9 :(得分:0)
一种方法是使用您自己的实现来调用类方法,以替换[UIImage imageNamed:]
,然后检查实现中的图像名称。请参阅以下内容:
How to swizzle a class method on iOS?
我在UIImage(调试)类别中实现了这个:
+ (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:]
。
答案 10 :(得分:0)
您提供了一些无效的图片名称,因此需要在投放之前进行验证,您可以执行上述任何一种方法,无论哪种方式对您的代码有意义,或者
if (iconImageName && [iconImageName length])
{
[UIImage imageNamed:iconImageName];
}
else
{
iconImageName.hidden = YES;
}
希望它会有所帮助!!!!
答案 11 :(得分:-1)
也许您可以使用它来确认“imageName”不是“nil”;然后您将放弃此警告。
if (imageName) {
self.imageView.image = [UIImage imageNamed:imageName];
}