TableViewApplication[1458:70b] CUICatalog: Invalid asset name supplied: (null), or invalid scale factor: 2.000000
使用TableViewController时收到此警告。如何纠正此错误以及哪个块受到影响?
TableViewApplication[1458:70b] CUICatalog: Invalid asset name supplied: (null), or invalid scale factor: 2.000000
使用TableViewController时收到此警告。如何纠正此错误以及哪个块受到影响?
Answers:
当有人尝试放入时nil
出现[UIImage imageNamed:]
为添加符号断点 [UIImage imageNamed:]
$arg3 == nil
在Simulator,$r0 == nil
32位iPhone或$x2 == nil
64位iPhone上添加条件。
运行您的应用程序,然后查看调试器将在哪里停止。
PS请记住,如果图像名称为空字符串,也会发生这种情况。您可以通过添加[(NSString*)$x2 length] == 0
条件来进行检查。
UIImage imageNamed:
,但是我还是保存了这个断点。
$arg3
条件断点的语法。在哪里可以了解更多?
error: use of undeclared identifier '$arg3'
。我错过了什么?
(int)[$arg3 length] == 0
当您尝试使用加载图像时,通常会发生此错误,[UIImage imageNamed:myImage]
但iOS不确定是否myImage
确实是NSString
,然后出现此警告。
您可以使用以下方法解决此问题:
[UIImage imageNamed:[NSString stringWithFormat:@"%@", myImage]]
或者,您可以简单地检查length
的名称UIImage
:
if (myImage && [myImage length]) {
[UIImage imageNamed:myImage];
}
由于错误提示您输入的名称是(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值调用此代码。
在Xcode 6.4中,对于情节提要中的选项卡栏项使用“选定的图像”时,即使它是有效的图像,也似乎会发生这种情况。
无论如何,这实际上似乎并没有设置选定的状态图像,因此需要在“用户定义的运行时属性”中定义它,并将其从“标签栏”项的“ SelectedImage”属性中删除。
就我而言,我正在传递[UIImage imageNamed:@“”],这使我显示了警告。只需在使用imageNamed的所有行中添加断点,然后在找到警告的行中调试即可。
[UIImage imageNamed:@""]
。你怎么修好它的?
if
测试图像名称是否不是空字符串,或者使用默认的“ noImage”图像之外,当没有适用的名称适用且资产不包含“ noImage”图像时,如何不显示图像?
在将故事板分成几部分后,我发生了这种情况(实际的更改是在我度假时发生的,所以我不知道它是如何完成的)。
在检查情节提要的XML之后,我发现以前在资产目录中指向“ bottomBar”的图像参考指向imageView:fFo-1g-jzs:image
。
在XML文件末尾的<resources>
标记下是名为的标记,<image name="imageView:fFo-1g-jzs:image">
其中包含一个大mutableData
blob。
在情节提要中重置图像参考并删除斑点后,错误消失了。
发生错误的原因是将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:]
为您自己的实现,然后在实现中检查映像名称。请参阅以下内容:
我在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:]
。