我按照您开始提问时出现的链接解决了问题 他们告诉我怎么样,但不是为什么...... 所以我的问题是要理解编译器警告语言
在Xcode中 我想要一个触发AlertView的按钮来假设用户输入的结果:
UITextField *textfield = [alertView textFieldAtIndex:0];
circumference = [textfield.text floatValue];
NSString *myString = textfield.text;
[_myButton setTitle:(@"%@",myString) forState:UIControlStateNormal];
嗯,它有效,加上警告 我应该在这里提出我的问题: 警告说“表达结果未使用”。他们怎么想的?我正在使用表达式的结果 - 就在按钮上。
对于那些有关的人,这是修复:
UITextField *textfield = [alertView textFieldAtIndex:0];
circumference = [textfield.text floatValue];
[_myButton setTitle:[NSString stringWithFormat:@"%@",textfield.text] forState:UIControlStateNormal];
答案 0 :(得分:1)
[_myButton setTitle:(@"%@",myString) forState:UIControlStateNormal];
没什么意义。我实际上会期望语法错误,但由于comma operator
(@"%@",myString)
实际上就像写作
({
@"%@";
myString;
})
所以你写的相当于
[_myButton setTitle:({
@"%@";
myString;
}) forState:UIControlStateNormal];
(如果有人想知道,是的,this is valid syntax as well。)
因此最终(@"%@",myString)
评估为myString
,但表达式@"%@"
未使用,您会收到警告。
setTitle:forState:
期望NSString
作为第一个参数,而您恰好已经有NSString
,名为myString
。
只做
[_myButton setTitle:myString forState:UIControlStateNormal];
答案 1 :(得分:0)
您在变量textfield
中收到了myString
的值,但您没有在其他地方使用它。这就是为什么你得到了警告"表达结果未使用" 。只需删除该行。
UITextField *textfield = [alertView textFieldAtIndex:0];
circumference = [textfield.text floatValue];
//NSString *myString = textfield.text;
[_myButton setTitle:textfield.text forState:UIControlStateNormal];