我正在尝试使用ASIHTTPRequest向服务器发送信息,并设置如下的发布值:
for(int i = 0;i<13;i++){
[request setPostValue:propertyValues[i] forKey:propertyKeys[i]]
}
propertyValues和propertyKeys都是NSArray对象,每个对象包含13个项目。当我运行它时,我得到错误“下标需要接口大小'NSArray',这在非稳定的ABI中不是常数”
这是什么意思?
答案 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]];