0
-(IBAction)someMethod:(UIStepper *)sender{
    int x=sender.value; //This is an integer from 0-8;
    NSLog(@"%f",sender.value);
    NSArray *rpmValues = [[NSArray alloc]initWithObjects:@"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",@"i", nil];
    if (x<=[rpmValues count]) {

        myLabel.text = [rpmValues objectAtIndex:x];
    }
    NSLog(@"%i",[rpmValues count]);
}

上記は私のコードです。私がやりたいのは、UIStepper を変更して UILabel の表示を変更することです。これは非常に簡単です。しかし、ステッパーの値を変更すると、クラッシュします。

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -   [__NSArrayM objectAtIndex:]: index 1 beyond bounds for empty array'
*** First throw call stack:

[rpmValue count] は 9 です。本当に混乱しました。誰でも私を助けることができますか?

4

2 に答える 2

4

そのコードは問題ないようです(質問に対する私のコメントを参照してください)。あなたの問題はの使用から生じる可能性があります

if (x<=[rpmValues count]) {

これには、インデックス範囲を 1 つ超える配列のカウントが含まれます。使用する

if (x < [rpmValues count]) {
于 2012-11-06T22:43:40.937 に答える
0

少なくともif (x<=[rpmValues count])である必要がありますif (x<[rpmValues count])。それ以外の場合、たとえば 2 つのエンティティを含む配列がある場合、インデックス 0、1、および 2 にアクセスできるようになります。合計で 3 つの可能性があります。

maximumValue同様のロジックに基づいて、ステッパーに「9」を設定した可能性はありますか?

于 2012-11-06T22:43:54.893 に答える