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


Answers:


242

当有人尝试放入时nil出现[UIImage imageNamed:]

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

$arg3 == nil在Simulator,$r0 == nil32位iPhone或$x2 == nil64位iPhone上添加条件。

运行您的应用程序,然后查看调试器将在哪里停止。

PS请记住,如果图像名称为空字符串,也会发生这种情况。您可以通过添加[(NSString*)$x2 length] == 0条件来进行检查。


7
这是一个聪明的方法。看起来我的nil图像在笔尖中的某个位置,因此它没有通过UIImage imageNamed:,但是我还是保存了这个断点。
cbowns,2015年

9
我不知道$arg3条件断点的语法。在哪里可以了解更多?
Zev Eisenberg 2015年

3
不知道为什么它对我不起作用,总是回来error: use of undeclared identifier '$arg3'。我错过了什么?
2015年

5
我不断得到:由于评估断点23.1的条件而出错,因此停止:“ $ r0 == nil”无法解析条件表达式:错误:使用未声明的标识符'$ r0'错误:1错误解析表达式
Pranoy C

8
在我的情况下,图像名称字符串为空,因此检查arg3的长度对我有用。(int)[$arg3 length] == 0
马修·科普奥拉尔

62

当您尝试使用加载图像时,通常会发生此错误,[UIImage imageNamed:myImage]但iOS不确定是否myImage确实是NSString,然后出现此警告。

您可以使用以下方法解决此问题:

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

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

if (myImage && [myImage length]) {

    [UIImage imageNamed:myImage];
}

1
如果有人犯了与我相同的错误,我试图更新要删除的UIButton的背景图像(根本没有图像),因此我将UIImage名称从字符串更改为仅“”,这导致了错误。通过删除整个UIImage(named:“”)并将其替换为nil,错误消失了。
Dave G

@DaveG先生,您救了我几个小时。谢谢你的意见!
杰夫

22

由于错误提示您输入的名称是(null),因此很可能是由引起的[UIImage imageNamed:nil]。更具体地说,尚未设置传递变量,因此等于nil。虽然使用stringWithFormat:可以消除错误,但我认为很有可能它并未真正按照您的意愿进行。如果您提供的名称是一个nil值,则使用stringWithFormat:会导致它寻找一个字面名为“(null)”的图像,就像您正在调用一样[UIImage imageNamed:@"(null)"]

这样的事情可能是一个更好的选择:

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

您可能想在Xcode的“其他操作”行上设置一个断点,以帮助您弄清楚为什么首先使用nil值调用此代码。


1
我遇到了同样的问题,错误是图像名称为零,就像robotspacer所说的那样。
diegomen 2014年

17

在Xcode 6.4中,对于情节提要中的选项卡栏项使用“选定的图像”时,即使它是有效的图像,也似乎会发生这种情况。

在此处输入图片说明

无论如何,这实际上似乎并没有设置选定的状态图像,因此需要在“用户定义的运行时属性”中定义它,并将其从“标签栏”项的“ SelectedImage”属性中删除。

在此处输入图片说明


1
谢谢你!这些错误/警告消息使我发疯!我无法弄清楚为什么Apple不能摆脱IB中的Tab Bar项目“ Selected Image”下拉菜单,也无法对其进行修复以使其正常工作。
wcochran 2015年

4

就我而言,我正在传递[UIImage imageNamed:@“”],这使我显示了警告。只需在使用imageNamed的所有行中添加断点,然后在找到警告的行中调试即可。


我也在用[UIImage imageNamed:@""]。你怎么修好它的?
Julfikar '17

[aButton setImage:nil forState:UIControlStateNormal]
Hahnemann

除了使用if测试图像名称是否不是空字符串,或者使用默认的“ noImage”图像之外,当没有适用的名称适用且资产不包含“ noImage”图像时,如何不显示图像?
消失了

2

在将故事板分成几部分后,我发生了这种情况(实际的更改是在我度假时发生的,所以我不知道它是如何完成的)。

在检查情节提要的XML之后,我发现以前在资产目录中指向“ bottomBar”的图像参考指向imageView:fFo-1g-jzs:image

在XML文件末尾的<resources>标记下是名为的标记,<image name="imageView:fFo-1g-jzs:image">其中包含一个大mutableDatablob。

在情节提要中重置图像参考并删除斑点后,错误消失了。


这为我解决了,一直在寻找这个问题已有一段时间,这让我发疯。断点schtick对我不起作用。
Moshe Gottlieb

同样的问题,但是断点确实帮助我找到了它所在的XIB。映像名称是IB中的Unknown Image。
乔什·伯恩菲尔德

1

我刚刚解决了这个错误。只需检查该[UIImage imageNamed:(NSString*) imageName]功能的用法即可。如果imageNamenil,则发生错误。


1

您提供的图片名称无效,因此需要先进行验证,然后再执行上述任何一种对您的代码有意义的方式

if (iconImageName && [iconImageName length])
{

    [UIImage imageNamed:iconImageName];
}
else
{
     iconImageName.hidden = YES;
}

希望对您有所帮助!!!


0

发生错误的原因是将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;
}

0

加载图片使用时收到此警告[[UIImage imageNamed:normalStr] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal],然后更改为[UIImage imageNamed:normalStr],警告消失了。


0

一种方法是将类方法替换[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:]


-1

也许您可以使用它来确认“ imageName”不是“ nil”;然后您将忽略此警告。

 if (imageName) {
    self.imageView.image = [UIImage imageNamed:imageName];
 }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.