所以我试图用发送到服务器的JSON参数数组做一个post请求,这里是代码
for(USER_ACTIONS *ua in [USER_ACTIONS listRegisterdActions]){
//Create a single JSON object here
[array addObject:jsonString];
}
NSString *dataString = [NSString stringWithFormat:@"[%@]",array.count ?
NSData* data = [dataString dataUsingEncoding:NSUTF8StringEncoding];
NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
parameters[@"data"] = data;
[self POST:@"?cmd=log" parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject) {
} failure:^(NSURLSessionDataTask *task, NSError *error) {
}];
这适用于单个JSON对象,但是一旦有更多的JSON对象,我就会得到以下异常
***由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'JSON写入中的类型无效(NSConcreteMutableData)'
使用多个帖子请求执行此操作是不可能的,所以我需要一种方法来执行此操作,我的搜索结果没有得到任何有关如何使用AFNetworking 2.x执行此操作的明确结果所以我我很欣赏一些关于去哪里的建议。
答案 0 :(得分:2)
AFNetworking可以自动将NSDictionary中的参数更改为JSON。
将您经理的财产requestSerializer
更改为AFJSONRequestSerializer
,默认值为AFHTTPRequestSerializer
AFJSONRequestSerializer
是AFHTTPRequestSerializer
的子类,使用NSJSONSerialization
将参数编码为JSON,将编码请求的Content-Type
设置为application/json
。
答案 1 :(得分:0)
出于某种原因,仅使用带有constructBodyWithBlock参数的AFHTTPSessionManager Post函数实际上是出于某种原因。不知道为什么这是必要的,因为实际上没有任何东西在那个街区,如果有人能告诉我为什么它会很好。
[self POST:@"?cmd=log" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
//For some reason the request won't work unless this block is included in the function as well, even though nothing is actually done in it
} success:^(NSURLSessionDataTask *task, id responseObject) {
//Success code here
} failure:^(NSURLSessionDataTask *task, NSError *error) {
}];