我有一个选择器视图,我希望它中的东西是飞机的尾号。我使用此代码,但收到警告Loop will run once at most, (loop increment never executed)
,然后收到错误control may each end of non-void function.
这里有什么问题?
CODE:
- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
for (NSInteger i = [[NSUserDefaults standardUserDefaults]integerForKey:@"planeNum"]; (i = 0); i--) {
NSString *dTailNumber = [NSString stringWithFormat:@"%@", [[NSUserDefaults standardUserDefaults]objectForKey:[NSString stringWithFormat:@"Plane%liTailNumber", i]]];
return dTailNumber;
}
}
答案 0 :(得分:18)
您收到警告的原因
循环最多运行一次,(循环增量从不执行)
是因为你在循环体中有一个无条件的return
。在第一次执行循环时,在达到循环增量之前,它将return
退出方法。
你得到
的原因控制可能会到达非空函数的末尾
是因为无法保证此功能能够返回任何内容。如果循环执行0次怎么办?然后该方法永远不会返回任何东西,这是不正确的,因为它被声明为返回NSString
。
答案 1 :(得分:0)
太多想着它了。这很简单(我花了一分钟时间搞清楚了!)
- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
// set a blank string
NSString *dTailNumber = @"";
for (NSInteger i = [[NSUserDefaults standardUserDefaults]integerForKey:@"planeNum"]; (i = 0); i--) {
// no need to declare here now
dTailNumber = [NSString stringWithFormat:@"%@", [[NSUserDefaults standardUserDefaults]objectForKey:[NSString stringWithFormat:@"Plane%liTailNumber", i]]];
// this is removed from loop
// return dTailNumber;
}
// instead return here
return dTailNumber;
}
该方法本身将首先确保(self)将返回相应的属性(NSString *)...之前运行任何代码......期间!我总是忘记编译器只需检查所需的一切,然后运行所有内部函数!当你想出来时非常酷!