设置按钮图像方法

SHE*_*ANE 7 iphone cocoa-touch objective-c uibutton ios

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

-(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];
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误.

2013-09-22 10:35:39.985 Tapple[15663:a0b] CUICatalog: Invalid asset name supplied: , or invalid scale factor: 1.000000
Run Code Online (Sandbox Code Playgroud)

bne*_*ely 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];
    } }
Run Code Online (Sandbox Code Playgroud)

  • 我认为@bneely意味着`[button setImage:nil forState:UIControlStateHighlighted];` (2认同)

小智 5

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

打开Breakpoint Navigator并单击左下角的"+"按钮.选择"添加符号断点...".然后编辑断点以进行这些设置:

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

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

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

您只需要这个断点就可以检查整个代码库中的调用源.