7

我希望此方法检查条件是否为真,然后设置特定按钮(按钮)以具有我指定的图像。这是代码。

-(void)canAfford:(float) f: (UIButton*)button {
    if([self playerHas:(f)] == YES) {
        [button setImage:[UIImage imageNamed:nil] forState:UIControlStateNormal];
        [button setImage:[UIImage imageNamed:@"ButtonBGclicked.png"] forState:UIControlStateHighlighted];
    } else {
        [button setImage:[UIImage imageNamed:@"ButtonBG.png"] forState:UIControlStateNormal];
        [button setImage:[UIImage imageNamed:nil] forState:UIControlStateHighlighted];
    }
}

这是我得到的错误。

2013-09-22 10:35:39.985 Tapple[15663:a0b] CUICatalog: Invalid asset name supplied: , or invalid scale factor: 1.000000
4

6 回答 6

13

您正在呼叫[UIImage imageNamed:@""][UIImage imageNamed:nil]。没有图像将匹配空字符串。如果您尝试清除图像,请通过nil而不是调用imageNamed:.

试试这个(更新的原始代码,合并@Kyle Fang 的评论):

- (void)canAfford:(float) f: (UIButton*)button {
    if([self playerHas:(f)] == YES) {
        [button setImage:nil forState:UIControlStateNormal];
        [button setImage:[UIImage imageNamed:@"ButtonBGclicked.png"] forState:UIControlStateHighlighted];
    } else {
        [button setImage:[UIImage imageNamed:@"ButtonBG.png"] forState:UIControlStateNormal];
        [button setImage:nil forState:UIControlStateHighlighted];
    } }
于 2013-09-22T09:44:05.963 回答
5

使用断点查找导致 +[UIImage imagenamed:] 生成错误的特定调用的更好方法是使用符号断点。

打开断点导航器并单击左下角的“+”按钮。选择“添加符号断点...”。然后编辑断点以具有以下设置:

符号:+[UIImage imageNamed:] 条件:$r2 == nil

Condition 测试寄存器 r2,它指向 imageNamed: 方法的参数,用于该方法的零值参数。如果您想查看是否将空字符串用作参数,您还可以将 Condition 设置为 (BOOL)[(NSString*)$r2 isEqualToString:@""]。请注意,寄存器 r2 仅在设备上进行调试时存在。模拟器将使用不同名称的寄存器,因为它在 x86 架构上运行。

当条件满足时,调试器将中断 UIKit 库的汇编代码,但您可以在线程的堆栈跟踪中找到调用的原始源。

你只需要这个单一的断点来检查你的整个代码库的调用源。

于 2014-02-20T19:31:09.007 回答
1

在使用 Xcode 5 中的新资产目录后,我开始遇到相同的错误“CUICatalog: Invalid asset name provided: , or invalid scale factor: 2.000000”。

经过一些调试后,我发现导致该错误的原因是将参数“nil”或空字符串@“”传递给类方法 [UIImage imageNamed:]。即使传递包中不存在的文件名也不会触发该错误。

因此,我同意 bneely(因此得到了我的赞成票)的修复。现在,如果您按照 bneely 的建议进行操作,但仍然出现错误,请确保您检查了您的代码,并可能在您调用 [UIImage imageNamed:] 的任何位置放置一个断点,并查看您传递的是 nil 还是空字符串争论。

仅供参考,要创建断点,只需单击代码编辑器的左边缘并添加蓝色断点。然后右键单击断点并从弹出的菜单中选择“编辑断点..”。然后在“条件”框中输入如下内容:

(!imageFileName || [imageFileName isEqualToString:@""])

其中 imageFileName 是代表您尝试加载的图像文件的字符串。

于 2013-10-01T22:37:15.867 回答
1

1)按加号按钮后添加符号断点。 底部的加号 2)添加此布尔行以检查空字符串 条件的布尔线 3)这是自动添加的(在构建后不确定)所以我编辑添加条件 检查零

希望这可以帮助一些额外的,包括我在内。

于 2014-09-10T18:02:17.313 回答
1

我发现对我来说这个问题的根源是我从定义图像中获取数据的数组被标记weak, nonatomic并从我下面清除。

将数据源数组设置为nonatomic, retain解决了这个难以捉摸的问题。

于 2013-12-11T01:25:47.463 回答
0

仅当您使用 IB 或 Storyboard 时才阅读此内容!

在故事板中为 UIImageView 设置图像然后在资产目录中更改该图像名称后,我遇到了这个问题。故事板中的 ImageView 仍然带有该图像,但在图像视图的属性检查器中,图像字段显示“未知图像”。一切正常,因为后来我通过代码设置图像,除了烦人的日志。

呃,看起来像“图像”这个词的过度使用,希望它对某人有所帮助。

于 2014-02-08T20:09:56.750 回答