【问题标题】:Error: CUICatalog: Invalid asset name supplied: (null), or invalid scale factor : 2.000000错误:CUICatalog:提供的资产名称无效:(null),或比例因子无效:2.000000
【发布时间】:2023-03-13 09:47:01
【问题描述】:
TableViewApplication[1458:70b] CUICatalog: Invalid asset name supplied: (null), or invalid scale factor: 2.000000

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

【问题讨论】:

  • 你能贴一些代码吗?
  • 如果图像名称为空字符串,也会出现此警告

标签: ios objective-c xcode5


【解决方案1】:

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

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

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

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

if (myImage && [myImage length]) {

    [UIImage imageNamed:myImage];
}

【讨论】:

  • 如果有人犯了同样的错误,我正在尝试更新要删除的 UIButton 的背景图像(根本没有图像),因此我将 UIImage 名称从字符串更改为“” ,从而导致错误。通过删除整个 UIImage(named: "") 并将其替换为 nil,错误消失了。
  • @DaveG 先生,您节省了我的时间。谢谢你的评论!
【解决方案2】:

由于错误是抱怨你给的名字是(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 值调用此代码。

【讨论】:

  • 我遇到了同样的问题,错误是图像名称是 nil,就像 robotsspacer 说的那样。
【解决方案3】:

我刚刚修复了这个错误。只需检查[UIImage imageNamed:(NSString*) imageName] 函数的用法即可。如果imageNamenil,则会发生错误。

【讨论】:

    【解决方案4】:

    当有人试图将nil 放入[UIImage imageNamed:] 时,就会出现这个

    [UIImage imageNamed:]添加符号断点

    在模拟器上添加 $arg3 == nil 条件,在 32 位 iPhone 上添加 $r0 == nil 条件,或在 64 位 iPhone 上添加 $x2 == nil

    运行您的应用程序并查看调试器将停止的位置。

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

    【讨论】:

    • 这是一个聪明的方法。看起来我的 nil 图像在我的笔尖的某个地方,所以它没有通过UIImage imageNamed:,但我仍然保存了这个断点。
    • 我不知道条件断点的$arg3 语法。我在哪里可以了解更多信息?
    • 不确定为什么它对我不起作用,总是返回error: use of undeclared identifier '$arg3'。我错过了什么吗?
    • 我不断收到:由于评估断点 23.1 条件的错误而停止:“$r0 == nil”无法解析条件表达式:错误:使用未声明的标识符“$r0”错误:1解析表达式错误
    • 在我的情况下,图像名称字符串为空,因此检查 arg3 长度对我有用。 (int)[$arg3 length] == 0
    【解决方案5】:

    在我的情况下,我传递了 [UIImage imageNamed:@""] 导致我显示警告。只需将断点添加到您使用 imageNamed 的所有行并调试您找到警告的行。

    【讨论】:

    • 我也在使用 [UIImage imageNamed:@""] 。你是怎么解决的?
    • [aButton setImage:nil forState:UIControlStateNormal]
    • 除了使用if 来测试图像名称是否不是空字符串,或者使用默认的“noImage”图像,当没有适用的名称和资产时如何不显示图像不包含“noImage”图像?
    【解决方案6】:

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

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

    【讨论】:

    • 谢谢!这些错误/警告信息让我抓狂!我不明白为什么 Apple 既没有摆脱 IB 中的选项卡栏项目“选定图像”下拉菜单,也没有修复它以使其正常工作。
    【解决方案7】:

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

    【讨论】:

      【解决方案8】:

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

      【讨论】:

        【解决方案9】:

        一种方法是进行类方法调配,将[UIImage imageNamed:] 替换为您自己的实现,然后检查您的实现中的图像名称。请参阅以下内容:

        How to swizzle a class method on 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:]

        【讨论】:

          【解决方案10】:

          您提供了一些无效的图像名称,因此需要在放置之前进行验证,您可以执行上述任何对您的代码有意义的方式或类似

          if (iconImageName && [iconImageName length])
          {
          
              [UIImage imageNamed:iconImageName];
          }
          else
          {
               iconImageName.hidden = YES;
          }
          

          希望对你有帮助!!!!

          【讨论】:

            【解决方案11】:

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

             if (imageName) {
                self.imageView.image = [UIImage imageNamed:imageName];
             }
            

            【讨论】:

              【解决方案12】:

              这发生在我将一个故事板分成几个之后(实际的变化发生在我度假时,所以我不知道它是如何完成的)。

              在检查了故事板的 XML 之后,我发现之前在资产目录中指向“bottomBar”的图像引用现在指向了imageView:fFo-1g-jzs:image

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

              在情节提要中重置图像引用并删除 blob 后,错误消失了。

              【讨论】:

              • 这为我解决了这个问题,一直在寻找这个问题,它让我发疯了。断点 schtick 对我不起作用。
              • 同样的问题,但断点确实帮助我找到了它所在的 xib。图像名称是 IB 中的未知图像。
              猜你喜欢
              • 2014-06-09
              • 2014-10-26
              • 2014-03-24
              • 2014-12-17
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-02-26
              • 2019-04-18
              相关资源
              最近更新 更多