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

时间:2014-02-25 10:18:55

标签: ios objective-c xcode5

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

Screenshot added

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

12 个答案:

答案 0 :(得分:189)

当有人试图将nil放入[UIImage imageNamed:]

时,会出现此消息

[UIImage imageNamed:] Symbolic breakpoint example

添加符号断点

在模拟器上添加$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中,当使用“选定图像”作为故事板中的标签栏项目时,即使它是有效图像,也会出现这种情况。

enter image description here

这实际上似乎无法设置所选的状态图像,因此需要在用户定义的运行时属性中定义,并从Tab Bar项的SelectedImage属性中删除

enter image description here

答案 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]功能的用法。如果imageNamenil,则会发生错误。

答案 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];
 }