在我的应用程序中我有这个方法
-(void) Setinput:(int)input {
//value declared in .h
value = input;
switch(value){
case(0)
[b_do setTitle:@"Do" forState:(UIControlState )UIControlStateNormal];
[b_re setTitle:@"Re" forState:(UIControlState )UIControlStateNormal];
[b_me setTitle:@"Me" forState:(UIControlState )UIControlStateNormal];
[b_fa setTitle:@"Fa" forState:(UIControlState )UIControlStateNormal];
[b_sol setTitle:@"Sol" forState:(UIControlState )UIControlStateNormal];
[b_la setTitle:@"La" forState:(UIControlState )UIControlStateNormal];
[b_ci setTitle:@"Ci" forState:(UIControlState )UIControlStateNormal];
[b_doo setTitle:@"Doo" forState:(UIControlState )UIControlStateNormal];
break;
case 1
[b_do setTitle:@"Doo" forState:(UIControlState )UIControlStateNormal];
[b_re setTitle:@"Ree" forState:(UIControlState )UIControlStateNormal];
[b_me setTitle:@"Mee" forState:(UIControlState )UIControlStateNormal];
[b_fa setTitle:@"Faa" forState:(UIControlState )UIControlStateNormal];
[b_sol setTitle:@"Soll" forState:(UIControlState )UIControlStateNormal];
[b_la setTitle:@"Laa" forState:(UIControlState )UIControlStateNormal];
[b_ci setTitle:@"Cii" forState:(UIControlState )UIControlStateNormal];
[b_doo setTitle:@"Dooo" forState:(UIControlState )UIControlStateNormal];
break;
case 2;
//code
break;
default
...
break;
}
}
在mainviewcontroller中,当我编写这段代码时,为什么没有发生什么?
MainViewController xxx = [[MainViewController alloc] init];
[xxx Setinput:0]
答案 0 :(得分:1)
很明显,此代码未在此处复制/粘贴,因为value = input
行缺少分号,而且永远不会编译。假设在编写SO问题时语法问题只是一个错误问题,代码看起来还不错。这意味着其他一些假设正在破裂。基于此代码段的最可能的错误假设是:
Setinput:
方法。 我怀疑按钮没有连接到那些变量,但是从这段代码片段中无法分辨出来。我很好奇为什么有(UIControlState)
的演员。如果你在没有它的情况下编译会发生什么?
以下是您可以做的事情:点击value = input;
行旁边的行号在那里设置断点,然后“Build& Debug”。当程序到达断点时,逐步执行代码,注意变量视图中变量的值。你可能需要打开“自我”才能看到它们。我怀疑第一个假设是假的b_do
而朋友将是0x00
。
如果没有,它还可以帮助在变量视图中显示Type列(运行 - >变量视图 - >显示类型列),这样您就可以确保按钮是UIButton
个对象,如您所料。这验证了第二个假设是真的。
如果应用程序永远不会到达该断点,那么第三个假设已经失败,问题不在于此代码中,而是在其他地方。
除了可能是这段代码。你真的打电话给[xxx Setinput:0]
还是打电话给xxx.input=0
?我为什么这么问?遵循Objective-C约定时,类以大写字母开头,变量和方法以小写字母开头,所有三个都是CamelCased。因此,按惯例,Setinput:
应为setInput:
。这很重要,因为xxx.input=0
是[xxx setInput:0]
的语法糖。如果你不遵循大小写惯例,那么语法糖将不会按预期工作。