2011-03-23 64 views
3

我使用ASIFormDataRequest将数据发布到服务器,并且我需要张贴值的数组(字符串在下面的示例)。我使用一个枚举器遍历每个请求,并将它们添加到请求中,但只有最后一个出现 - 您期望的行为setPostValue,而不是addPostValueASIHTTPRequest多个POST参数

任何想法为什么只有一个值通过?

NSEnumerator *pupilEnumerator = [pupils objectEnumerator]; 
id pupil; 
while ((pupil = [pupilEnumerator nextObject])) { 
    [request addPostValue:pupil forKey:@"pupils"]; 
} 

注意也会出现这种情况addFileaddPostData

干杯。

回答

3

如果我是你我会把你的pupils对象捆绑成一个JSON字符串(我会使用JSON框架,但还有其他选项),并把它放在后身。

或者,如果你张贴到PHP脚本,你可以发布多个值直入一个数组,通过把“[]”键名之后。所以,仍然在你的循环中,你可以说[request addPostValue:pupil forKey:@"pupils[]"];,然后你的发布脚本将有一个名为$ pupils的数组,其中将包含所有这些值。

+0

感谢丹,我发誓我以前曾尝试过这种方式,但它不起作用,但它现在正在工作 - 我的应用程序现已完成!谢谢。 – 2011-03-24 08:36:29

4

你的循环只是不断取代“学生”的价值。摆脱循环,并尝试[request addPostValue:pupils forKey:@"pupils"];

+0

我给它一个尝试,但他们的文件说,这是应该如何工作的:'[请求addPostValue:@“奔“forKey:@”names“]; [请求addPostValue:@“George”forKey:@“names”];' – 2011-03-23 17:12:59

+0

好的,这是可行的 - 谢谢。但是我无法传递一个数组到'addFile'。这里是我的代码: 'NSEnumerator * assetEnumerator = [self.assets objectEnumerator]; id assetUrl; 而((assetUrl = [assetEnumerator nextObject])){// 通过轮廓点 [请求addFile:[(NSURL *)assetUrl路径] forKey:@ “文件”]; }' 任何想法? – 2011-03-23 17:20:49

+0

addPostValue:forKey:不会替换现有的值,并且是执行此操作的正确方法。 问题可能在于某些服务器要求您以某种方式命名具有多个值的参数 - 例如,在PHP中,您必须使用'pupils []'而不是'pupil'。 – pokeb 2011-03-23 21:58:09

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++]];