-6

そのため、コンパイラは using[arrayName objectAtIndex:i]が無効な式であると言っていますが、ドキュメントのすべてが私が正しくやっていると言っています。よくわかりません。この方法で配列にアクセスできないのはなぜですか?

-(IBAction)textWasEdited:(id)sender
{
   int i = 0;
   do
   {
       //do stuff
       i++
   } while([tipPercentages objectAtIndex:i] != Nil);
}

このコードに問題はありません。ここで私の髪を引っ張っています。

4

2 に答える 2

4

nil を返すことは不可能なobjectAtIndex:ので、コードは無意味です。NSArray に nil を含めることはできません。が NSArray でない場合tipPercentages(たとえば、C 配列の場合)、 に応答できませんobjectAtIndex:

于 2013-02-20T21:03:07.573 に答える
1

OK、ここで何をしているのか完全に明確にはわかりませんが、コードが配列の末尾を超えて配列要素にアクセスしようとしていることが問題だと思います ( objectAtIndex:nil を返すことができないため)。あなたはこのようなものがもっと欲しい:

- (IBAction)textWasEdited:(id)sender {
   __block int i = 0;
   [tipPercentages enumerateObjectsWithBlock:^(id object, NSUInteger idx, BOOL *stop) {
       //do stuff
       i++
   }];
}

または、本当にプリミティブ ループを維持したい場合は、次のようにします。

- (IBAction)textWasEdited:(id)sender {
   int i = 0;
   for (; i < [tipPercentages count]; i++) {
       id object = [tipPercentages objectAtIndex:i];
       //do stuff
   }];
}

デバッガーで何をしていても拒否されているのは副次的な問題だと確信しています。コードがコンパイルされている場合、コンパイラーはコードが無効であることを通知していません。

于 2013-02-20T21:32:35.037 に答える