0

我不明白为什么这段代码不起作用

我正在使用此委托方法来调整字体大小(我不费心展示它,因为它不相关)

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view;

这是一个多选择器。我有三个组件。当我使用 else 使用条件语句运行代码时,它使第 0 节与第 2 节匹配。我无法解释这一点

NSLog(@"%i", component); // only prints, 0, 1, 2
NSString *theString = @"";
if(component == 0){
    theString = [_phosType objectAtIndex:row];
}
if(component == 1){
    theString = [_quantity objectAtIndex:row];
} else {                                        // THIS CAUSES PROBLEMS.
    theString = [_units objectAtIndex:row];
}
pickerViewLabel.text = theString;

这个有效..什么给了!

NSLog(@"%i", component); // only prints, 0, 1, 2
NSString *theString = @"";
if(component == 0){
    theString = [_phosType objectAtIndex:row];
}
if(component == 1){
    theString = [_quantity objectAtIndex:row];
}

if(component == 2){                            // THIS WORKS!  BUT WHY?!
    theString = [_units objectAtIndex:row];
}
pickerViewLabel.text = theString;

为什么我需要明确询问组件是否为 2?我可以看到当我的 NSLog 组件永远不等于 0 1 或 2 以外的任何值时。我在代码中的其他任何地方都使用了“else”并且遇到了问题。谁能解释一下?

4

1 回答 1

0

如果component=0检查此 if 语句中发生的情况:

if(component == 1){
    theString = [_quantity objectAtIndex:row];
}
else {                                       
   theString = [_units objectAtIndex:row];
}

您可以看到 else 块将被执行,因为它将评估if(component == 1)为 false 并且 else 块将被执行。但是如果component=0这个块也将被执行:

if(component == 0){
    theString = [_phosType objectAtIndex:row];
}

因此,whencomponent=0 theString将被设置两次:在第一个 if 块中和在 else 块中。最终theString值将是 else 块中设置的值。

试试这个:

if(component == 0){
    theString = [_phosType objectAtIndex:row];
}
else if(component == 1){
    theString = [_quantity objectAtIndex:row];
}
else {                         
    theString = [_units objectAtIndex:row];
}
于 2013-08-17T07:33:03.760 回答