Ios 如何在afnethoking post方法中将数组作为参数发送?

Ios 如何在afnethoking post方法中将数组作为参数发送?,ios,ios6,afnetworking,Ios,Ios6,Afnetworking,嗨,我需要发送一个数组作为查询字符串中的参数之一 AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://192.008.0.28/aaa/a/"]]; NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: @"20", @"Miles", [NSArray array

嗨,我需要发送一个数组作为查询字符串中的参数之一

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL    URLWithString:@"http://192.008.0.28/aaa/a/"]];

    NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: @"20", @"Miles", [NSArray arrayWithObjects:@"1",@"2",@"3",nil], @"Interval", nil];

    [httpClient postPath:iUpdateNotificationMethod parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSString *responseStr = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
        NSLog(@"Request Successful, response '%@'", responseStr);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"[HTTPClient Error]: %@", error.localizedDescription);
    }];
但服务器端我们得到了“英里”:20,“间隔”:null如何修复它
谢谢,

因为您提交了一个数组,AFNetworking正在生成一个不同的参数名,并使用您提供的值重载它。例如,您的请求生成以下querystring:

Interval[]=1&Interval[]=2&Interval[]=3&Miles=20
这是在
AFQueryStringPairsFromKeyAndValue
函数的
AFHTTPClient.m
中定义的


如果要保留原始参数,应自行决定如何将
NSArray
转换为
NSString
。例如,您可以执行类似于
[myArray Components通过字符串连接:@“,”]
的操作,然后将其拆分回服务器上的元素。如果选择此方法,请注意不要使用实际数据中可能出现的字符。

由于您正在提交数组,AFNetworking将生成不同的参数名,并使用您提供的值重载它。例如,您的请求生成以下querystring:

Interval[]=1&Interval[]=2&Interval[]=3&Miles=20
这是在
AFQueryStringPairsFromKeyAndValue
函数的
AFHTTPClient.m
中定义的

如果要保留原始参数,应自行决定如何将
NSArray
转换为
NSString
。例如,您可以执行类似于
[myArray Components通过字符串连接:@“,”]
的操作,然后将其拆分回服务器上的元素。如果选择此方法,请注意不要使用实际数据中可能出现的字符。

我相信这会起作用: 参数={“英里”:“20”,“间隔”:[“1”,“2”,“3”]

我相信这会奏效: 参数={“英里”:“20”,“间隔”:[“1”,“2”,“3”]

试试这个

AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:OAuthBaseURL];

NSMutableDictionary *parameters = [[NSMutableDictionary alloc] initWithCapacity:0];
    for (int i =0; i < [userIDs count]; i++) {
        NSString *userID = [[userIDs objectAtIndex:i] objectForKey:@"id"];
        NSDictionary *tmpDict = [NSDictionary dictionaryWithObjectsAndKeys:userID , [NSString stringWithFormat:@"ids[%i]",i], nil];
        [parameters addEntriesFromDictionary:tmpDict];
    }
    [client postPath:@"/user"
          parameters:parameters
             success:^(AFHTTPRequestOperation *operation, id responseObject) {
                NSData *data = (NSData *)responseObject;
                NSString *jsonStr = [[NSString alloc] initWithData:data
                                                          encoding:NSUTF8StringEncoding];
                NSLog(@"jsonStr %@",jsonStr);

            }
            failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                [self showError];
            }
     ];
AFHTTPClient*client=[[AFHTTPClient alloc]initWithBaseURL:OAuthBaseURL];
NSMutableDictionary*参数=[[NSMutableDictionary alloc]initWithCapacity:0];
对于(int i=0;i<[userIDs count];i++){
NSString*userID=[[userIDs objectAtIndex:i]objectForKey:@“id”];
NSDictionary*tmpDict=[NSDictionary Dictionary WithObjectsAndKeys:userID,[NSString stringWithFormat:@“ids[%i]”,i],nil];
[parameters addEntriesFromDictionary:tmpDict];
}
[客户端后路径:@//用户”
参数:参数
成功:^(AFHTTPRequestOperation*操作,id响应对象){
NSData*数据=(NSData*)响应对象;
NSString*jsonStr=[[NSString alloc]initWithData:data
编码:NSUTF8StringEncoding];
NSLog(@“jsonStr%@”,jsonStr);
}
失败:^(AFHTTPRequestOperation*操作,NSError*错误){
[自动淋浴器];
}
];
试试这个

AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:OAuthBaseURL];

NSMutableDictionary *parameters = [[NSMutableDictionary alloc] initWithCapacity:0];
    for (int i =0; i < [userIDs count]; i++) {
        NSString *userID = [[userIDs objectAtIndex:i] objectForKey:@"id"];
        NSDictionary *tmpDict = [NSDictionary dictionaryWithObjectsAndKeys:userID , [NSString stringWithFormat:@"ids[%i]",i], nil];
        [parameters addEntriesFromDictionary:tmpDict];
    }
    [client postPath:@"/user"
          parameters:parameters
             success:^(AFHTTPRequestOperation *operation, id responseObject) {
                NSData *data = (NSData *)responseObject;
                NSString *jsonStr = [[NSString alloc] initWithData:data
                                                          encoding:NSUTF8StringEncoding];
                NSLog(@"jsonStr %@",jsonStr);

            }
            failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                [self showError];
            }
     ];
AFHTTPClient*client=[[AFHTTPClient alloc]initWithBaseURL:OAuthBaseURL];
NSMutableDictionary*参数=[[NSMutableDictionary alloc]initWithCapacity:0];
对于(int i=0;i<[userIDs count];i++){
NSString*userID=[[userIDs objectAtIndex:i]objectForKey:@“id”];
NSDictionary*tmpDict=[NSDictionary Dictionary WithObjectsAndKeys:userID,[NSString stringWithFormat:@“ids[%i]”,i],nil];
[parameters addEntriesFromDictionary:tmpDict];
}
[客户端后路径:@//用户”
参数:参数
成功:^(AFHTTPRequestOperation*操作,id响应对象){
NSData*数据=(NSData*)响应对象;
NSString*jsonStr=[[NSString alloc]initWithData:data
编码:NSUTF8StringEncoding];
NSLog(@“jsonStr%@”,jsonStr);
}
失败:^(AFHTTPRequestOperation*操作,NSError*错误){
[自动淋浴器];
}
];

这将生成与以前创建的词典完全相同的
NSDictionary
。对不起,您是对的。我以为他在用AFJSONRequestOperation。但在这种情况下,两者都可以工作。这将生成与以前创建的词典完全相同的
NSDictionary
。对不起,您是对的。我以为他在用AFJSONRequestOperation。但在这种情况下,两种方法都会起作用。我看到了类似的数组编码。你能更清楚地解释一下如何解决这个问题吗?这是一个设计问题。如果将数组作为HTTP参数传递,AFNetworking将需要将其转换为HTTP查询字符串。您可以想出各种方法来实现这一点(例如将输入与
)连接起来)。所选的方法不同-通过在参数前面加上
[]
来将其标记为数组。因此,您需要更改服务器端以处理此问题,或者传递一个
NSString
,该字符串是从客户端中加入的原始数组中精心编制的。我看到了类似的数组编码。你能更清楚地解释一下如何解决这个问题吗?这是一个设计问题。如果将数组作为HTTP参数传递,AFNetworking将需要将其转换为HTTP查询字符串。您可以想出各种方法来实现这一点(例如将输入与
)连接起来)。所选的方法不同-通过在参数前面加上
[]
来将其标记为数组。因此,您需要更改服务器端以处理此问题,或者传递一个
NSString
,该字符串是从客户机中加入的原始数组中精心编制的。这是您想要的吗?这就是你要找的吗?