0

我正在尝试禁用 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");
   }
}
4

1 回答 1

1

我建议您添加异常断点,以便您可以查看导致崩溃的代码行。请参阅此处了解如何操作:stackoverflow.com/q/4961770/472344。

这应该会导致您的代码在导致崩溃的行中断。您可以检查“row”的值和“locationArray”的大小。

看起来你的行是 2147483647 并且你的数组的长度是 16。所以我猜你的 UIPickerView 数据源可能有问题。也许发布您的代码:

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component

您还可以在该方法中设置一个断点,以确保它被正确调用,并检查它返回的值。

于 2012-08-31T02:40:32.527 回答