我是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,当取消选中该框时,和。我做错了什么?
谢谢,
贾斯汀。
答案 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)