【发布时间】:2015-12-17 16:05:10
【问题描述】:
我需要在 NSURLRequest 的 GET 请求中发送一个 NSDictionaries 的 NSArray 作为查询参数。我想发送的一个例子是这样的:
[{"name":"John","age":20},{"name":"Bob","age":25}]
我是通过 AFNetworking 发送的,内容如下:
- (NSString *)makeJSONString {
NSMutableArray *mutableArray = [NSMutableArray array];
for (RDPerson *person in [self.people allValues]) {
NSDictionary *currentPerson = @{@"name" : person.name, @"age" : person.age};
[mutableArray addObject:currentPerson];
}
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:mutableArray options:0 error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
return jsonString;
}
现在我已经将我的代码移到了 NSURLSession,这不起作用,那么将这个对象放入查询参数的正确方法是什么?
不工作的部分是
[self.urlSession dataTaskWithRequest:urlRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
此完成处理程序为数据和响应返回 null
解决方案: 所以事实证明,在您将其提交到 URL 之前,您必须为您的 url 执行此操作:
[mutableString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
然后使用 URLWithString 将其设置为 URL
【问题讨论】:
-
有什么不好的?请添加更多详细信息。
-
请发布不起作用的代码,以便我们查看可能是什么问题。此外,一般情况下,您不希望将 JSON 转换为字符串,而是将其保留为
NSData。 -
正确的方法是根据您的请求使用实体(“body”),大型 json 几乎不是参数。如果您希望进行最少的更改,请检查您的完整 URL 是否有效且完整,可能需要使用这种方法对某些参数进行编码和解码。\
-
继续 A-Live 的观察,将 JSON 放入请求的正文中,请求应该是
POST请求,而不是GET请求。GET请求没有正文,而POST请求有。如果你想成为一个好的网民,你应该在准备这个POST请求时将Content-TypeHTTP header设置为application/json。 -
这些是我放在基本 URL 之后的参数
标签: ios objective-c nsurlsession nsurlrequest