复选框状态问题

时间:2009-12-23 17:29:21

标签: objective-c cocoa

我是Cocoa的新手,并且正在通过Hillegass的书。我在第20章的挑战2中遇到了麻烦。

挑战是添加复选框,如果绘制的字母是斜体,粗体或两者,则切换。

-(IBAction)toggleItalic:(id)sender
{
int state = [italicBox state];
NSLog(@"state %d", state);
if (state = 1) {
    italic = YES;
    NSLog(@"italic is yes");
}
else {
    italic = NO;
    NSLog(@"italic is no");

}
}

现在,这个代码片段在选中此框时返回yes,当取消选中该框时,。我做错了什么?

谢谢,

贾斯汀。

2 个答案:

答案 0 :(得分:9)

你的问题在于你的if语句:

if (state = 1) {

您要将状态分配给值1:state = 1,而您需要测试的是状态当前是否为1:state ==1

这是一个相当常见的错误(特别是在允许在if语句中进行赋值的语言中)。学会解决这个问题的一个诀窍是进行比较检查:

if (1 == state) 

您无法将1指定给其他值。因此,如果您错误地使用=而不是==,则会出现编译错误,这很容易解决。

答案 1 :(得分:4)

使用比较而不是赋值并使用正确的枚举而不是可能更改的硬编码值:

if (state == NSOnState)
else if (state == NSOffState)