2013-09-22 89 views
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 

回答

13

您正在致电[UIImage imageNamed:@""][UIImage imageNamed:nil]。没有图像会匹配空字符串。如果您尝试清除图像,请通过nil而不是致电imageNamed:

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

- (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]; 
    } } 
+0

同样的错误仍在发生。 –

+2

我想@bneely意味着'[button setImage:nil forState:UIControlStateHighlighted];' –

1

我开始有同样的错误“CUICatalog:提供了无效的资产名称:,或无效的比例系数:2.000000”使用后资产目录,在Xcode 5中新增。

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

所以我同意bneely(因此得到了我的投票)的修复。现在,如果你做了什么,并且仍然得到错误,请确保你通过你的代码,并且可能在你调用的任何地方放置一个断点[UIImage imageNamed:],看看你是否传递一个零字符串或一个空字符串作为论据。

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

(!映像文件名称|| [映像文件名称isEqualToString:@“”])

其中映像文件名称是代表你是图像文件中的字符串试图加载。

+3

如果有人想出一种方法来同时编辑多个断点的条件,请告诉我......这是一个很难的错误找到您是否有大型项目的来源。 – danbretl

1

我发现这个问题的根源在于,我从定义图像中获取数据的数组被标记为weak, nonatomic,并从我的下方被清除。

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

0

只有在使用IB或故事板时才能阅读此内容!

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

呃,看起来像过度使用单词“形象”,希望它有助于某人。

5

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

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

符号:+ [UIImage的imageNamed:] 条件:$ R2 ==零

的条件测试寄存器R2,它指向参数的imageNamed:方法,对于该方法的无价值论证。如果您想查看是否使用了空字符串作为参数,您还可以将Condition设置为(BOOL)[(NSString *)$ r2 isEqualToString:@“”]。请注意,寄存器r2仅在调试设备的情况下才存在。模拟器将使用不同名称的寄存器,因为它在x86架构上运行。

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

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

1

1)按加号按钮后添加符号断点。 plus sign at the bottom 2)添加这个布尔线检查空字符串 boolean line for condition 3)这是自动添加(不知道制造后或没有),所以我编辑添加条件 check for nil

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