Jak*_*kub 6 objective-c ios afnetworking
我需要使用AFNetworking这个问题来构建这样的URL ,{以及}如何通过parameter
/api/sth.json?filter[condition]={"53891":[123],"53892":[123,124]}
Run Code Online (Sandbox Code Playgroud)
所以我的代码看起来像这样(我更简单):
[self GET:myUrl parameters:@{
@"filter" : @{
@"condition" : @{
@"53891" : @[@(123)],
@"53892" : @[@(123),@(124)]}
},
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
success(operation,responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
failure(operation,error);
}];
Run Code Online (Sandbox Code Playgroud)
但它产生的不是预期的产量:
/api/sth.json?filter[condition][53891][]=123&filter[condition][53892][]=123&filter[condition][53892][]=124
Run Code Online (Sandbox Code Playgroud)
有一种方法可以在parametersin AFHTTPRequestOperation或手动我必须把它放入字符串?
编辑:
我目前的解决方案是这样的:
+(NSString*)convertFromDictionary:(NSDictionary*)dic {
NSMutableString *outputStr = [NSMutableString new];
[outputStr appendString:@"{"];
NSArray *allKeys = [[dic allKeys] sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:nil ascending:NO]]];
for(NSString *key in allKeys) {
NSArray *objects = dic[key];
[outputStr appendString:[NSString stringWithFormat:@"\"%@\":[",key]];
for(NSNumber *nb in objects) {
[outputStr appendString:[NSString stringWithFormat:@"%li",[nb longValue]]];
if(![nb isEqual:[objects lastObject]]) {
[outputStr appendString:@","];
} else {
[outputStr appendString:@"]"];
}
}
if(![key isEqual:[allKeys lastObject]]) {
[outputStr appendString:@","];
}
}
[outputStr appendString:@"}"];
return outputStr;
}
Run Code Online (Sandbox Code Playgroud)
输入字典是:
@{@"53892" : @[@(123),@(124)]}
但它只不过是字符串比较.没有更聪明的方法来直接实现AFNetworking,因为它是相当标准的URL参数?
小智 1
您需要两种不同的方式来解析字典,但这不能自动完成。正如 Mehul 之前所说,在创建“参数”字典之前尝试序列化参数“条件”(将其值转换为字符串):
NSError *error;
NSDictionary *dict = @{@"53891" : @[@(123)], @"53892" : @[@(123),@(124)]};
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:0 error:&error];
NSString *params = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
[self GET:myUrl parameters:@{
@"filter" : @{
@"condition" : params
},
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
success(operation,responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
failure(operation,error);
}];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
167 次 |
| 最近记录: |