我正在尝试在UIPickerView上禁用第1行,但它会抛出以下错误
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 2147483647 beyond bounds [0 .. 15]'
任何人都可以告诉我这里出了什么问题?这是代码
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
AppDelegate *appdelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if ((row > 0)){
NSLog(@"%@",[locationArray objectAtIndex:row]);
if(flag){
appdelegate.selectedLocation = [locationArray objectAtIndex:row];
NSLog(@"%@",appdelegate.selectedLocation);
} else{
appdelegate.selectedLocation = [locationArray objectAtIndex:row];
NSLog(@"%@",appdelegate.selectedLocation);
}
[promptLocation addSubview:tapButton];
[tapButton addTarget:self action:@selector(goToDesireLoc:) forControlEvents:UIControlEventTouchUpInside];
}else{
//Don't do anything if row 0 is chosen.
NSLog(@"do nothing");
}
}
答案 0 :(得分:1)
我建议您添加异常断点,以便可以看到代码的哪一行导致崩溃。请参阅此处了解如何操作:stackoverflow.com/q/4961770/472344。
这会导致代码在导致崩溃的行中断。您可以检查“row”的值和“locationArray”的大小。
虽然您的行似乎是2147483647并且您的数组长度为16.所以我猜您的UIPickerView数据源可能存在问题。也许发布你的代码:
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
您还可以在该方法中设置断点,以确保正确调用它,并检查它返回的值。