无法访问Objective C中的数组元素

时间:2013-02-20 20:59:40

标签: ios objective-c

所以编译器告诉我使用[arrayName objectAtIndex:i]是一个无效的表达式,但文档中的所有内容都告诉我我做得对。我糊涂了。为什么不允许我这样访问阵列?

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

我看不出这段代码有什么问题!有点把我的头发拉出来。

2 个答案:

答案 0 :(得分:4)

objectAtIndex:不可能返回nil,因此您的代码毫无意义。没有NSArray可以包含nil。如果tipPercentages不是NSArray(例如,如果它是C数组),则它无法响应objectAtIndex:

答案 1 :(得分:1)

好的,我没有完全清楚你在这里做了什么,但我认为你的问题是你的代码一直试图访问数组末尾的数组元素(因为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
   }];
}

我很确定你在调试器中做了什么,它拒绝是一个副作用 - 如果你的代码正在编译,编译器告诉你你的代码无效。