我正在使用ASIFormDataRequest将数据发布到服务器,我需要发布一个值数组(下面示例中的字符串)。我正在使用枚举器循环遍历每个并将它们添加到请求中,但只有最后一个通过 - 您期望setPostValue
的行为,而不是addPostValue
。
知道为什么只有一个价值出现?
NSEnumerator *pupilEnumerator = [pupils objectEnumerator];
id pupil;
while ((pupil = [pupilEnumerator nextObject])) {
[request addPostValue:pupil forKey:@"pupils"];
}
请注意addFile
和addPostData
也会出现这种情况。
干杯。
答案 0 :(得分:4)
你的循环只是不断取代“瞳孔”值。摆脱循环并尝试[request addPostValue:pupils forKey:@"pupils"];
答案 1 :(得分:3)
如果我是你,我会将你的pupils
对象捆绑成一个JSON字符串(我使用JSON Framework,但还有其他选项),并把它放在帖子体中。
或者,如果您要发布到PHP脚本,则可以通过在键名后添加“[]”将多个值直接发布到数组中。所以,仍然在你的循环中,你可以说[request addPostValue:pupil forKey:@"pupils[]"];
,然后你的发布到脚本将有一个名为$ pupils的数组,它将包含所有这些值。
答案 2 :(得分:1)
我遇到了类似的问题,我有多个参数,其中一个(只有一个参数)应该是一个数组。我找到的更简单的方法是将该数组的值添加到NSMutableArray,然后将这些值传递给参数:
//Don't forget to set this array to retain its values in the property
self.arrSelected = [[NSMutableArray alloc]initWithArray:nil];
if(switch1.selected){
[self.arrServicesSelected addObject:@"value1"];
}
if(switch2.selected){
[self.arrServicesSelected addObject:@"value2"];
}
if(switch3.selected){
[self.arrServicesSelected addObject:@"value3"];
}
然后你只需要遍历数组并将值添加到POST参数。确保将它们添加到不同的索引。我看到有些人在没有索引的情况下添加到[]并且不起作用,因为它只会添加最后一个。如果你不使用[],你只会添加第一个。
for(int i=0; i< [self.arrSelected count];i++){
[requestPOST setPostValue:[self.arrSelected objectAtIndex:i] forKey:[NSString stringWithFormat:@"chk_parameter_serv[%i]", i]];
}
您还可以使用 forin 语法:
int i=0;
for(NSString *strValue in self.arrSelected)
[requestPOST setPostValue:strValue forKey:[NSString stringWithFormat:@"chk_parameter_serv[%i]", i++]];