下标需要接口'NSArray'的大小,这在非稳定的ABI中不是常数

时间:2011-06-03 14:08:43

标签: objective-c nsarray asihttprequest

我正在尝试使用ASIHTTPRequest向服务器发送信息,并设置如下的发布值:

    for(int i = 0;i<13;i++){
  [request setPostValue:propertyValues[i] forKey:propertyKeys[i]]    
}

propertyValues和propertyKeys都是NSArray对象,每个对象包含13个项目。当我运行它时,我得到错误“下标需要接口大小'NSArray',这在非稳定的ABI中不是常数”

这是什么意思?

4 个答案:

答案 0 :(得分:20)

这意味着您正在尝试访问NSArray*,就好像它是一个数组,或者是一个可以进行算术运算的指针。指针类型的x[5]等同于x + sizeof(x) * 5。注意sizeof运算符 - 这意味着编译器需要知道类型的大小以使指针前进5“项”。但是,NSArray是一个Objective C接口,编译器无法确定该类型的大小。这解释了你得到的错误的措辞。

更具说服力的是,您无法访问NSArray这样的对象。您需要向他们发送一条消息,询问给定索引处的项目,因此:

[propertyValues objectAtIndex:i];

答案 1 :(得分:3)

您无法使用方括号语法访问NSArray内的对象。你必须使用

[propertyValues objectAtIndex:i]

代替。

答案 2 :(得分:2)

要访问NSArray的元素,您必须使用objectAtIndex:方法

for(int i = 0;i<13;i++){
  [request setPostValue:[propertyValues objectAtIndex:i] forKey:[propertyKeys objectAtIndex:i]l    
}

答案 3 :(得分:1)

现在你不能访问NSArray中的值(这与C数组根本不同)。

[request setPostValue:[propertyValues objectAtInstance:i] forKey:[propertyKeys objectAtInstance:i]];