所以编译器告诉我使用[arrayName objectAtIndex:i]
是一个无效的表达式,但文档中的所有内容都告诉我我做得对。我糊涂了。为什么不允许我这样访问阵列?
-(IBAction)textWasEdited:(id)sender
{
int i = 0;
do
{
//do stuff
i++
} while([tipPercentages objectAtIndex:i] != Nil);
}
我看不出这段代码有什么问题!有点把我的头发拉出来。
答案 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
}];
}
我很确定你在调试器中做了什么,它拒绝是一个副作用 - 如果你的代码正在编译,编译器不告诉你你的代码无效。