使用JSON对象数组AFNetworking POST请求

时间:2015-06-25 13:50:01

标签: ios afnetworking-2

所以我试图用发送到服务器的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执行此操作的明确结果所以我我很欣赏一些关于去哪里的建议。

2 个答案:

答案 0 :(得分:2)

AFNetworking可以自动将NSDictionary中的参数更改为JSON。

将您经理的财产requestSerializer更改为AFJSONRequestSerializer,默认值为AFHTTPRequestSerializer

AFJSONRequestSerializerAFHTTPRequestSerializer的子类,使用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) {

    }];