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 dataSource に問題がある可能性があります。多分あなたのコードを投稿してください:

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

そのメソッド内にブレークポイントを設定して、正しく呼び出されていることを確認し、返される値を確認することもできます。

于 2012-08-31T02:40:32.527 に答える