当前位置: 首页 > 知识库问答 >
问题:

AFJSON问题

微生毅
2023-03-14

我一直收到以下错误消息:2013-01-22 01:44:43.091Section3App2[16625:6703]-[__NSCFArray长度]:在提交我的AFNetwork Request后发送到实例0x23a48780的无法识别的选择器。请求背后的想法是我们通过POST向带有JSON请求主体的REST API发送发布请求。我一整天都在摆弄这个,似乎不知道是什么导致了这个问题。

密码

NSString *string = @"[{\"code\": \"105N14560\"}]";
    NSString * jsonString = string;
    NSData * data = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
    NSError * error = nil;
    id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
        [request setHTTPBody:json];
       // [request setValue:[NSString stringWithFormat:@"%d", string.length] forHTTPHeaderField:@"Content-Length"];
        NSLog(@"request body:%@", request.HTTPBody);
       // NSLog(@"json: %@",json);
//    if (!json) {
//        // handle error
//        NSLog(@"fail");
//    }
        AFJSONRequestOperation *operation2 = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
            NSLog(@"JSON: %@", JSON);
        } failure:nil];
        [operation2 start];

这段代码成功地创建了请求体,但当它试图运行块时,抛出了错误,我完全被难倒了。我们将不胜感激。

共有1个答案

凌炜
2023-03-14

千万不要像第一行那样自己构建JSON字符串。使用NSJSONSerialization将与JSON兼容的Obj-C数据结构(如NSDictionaryNSArray)直接转换为NSData对象,用作请求主体。例如:

NSDictionary *JSON = [NSDictionary dictionaryWithObject:@"105N14560" forKey:@"code"];
id JSONData = [NSJSONSerialization dataWithJSONObject:JSON options:0 error:error];

您应该将生成的JSONData对象用于请求的HTTPBody以及请求的content-long。这是一个完整的示例:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL]; // URL = wherever the request should be sent to 

[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json" forHTTPHeaderField:@"content-type"];

id JSONData = [NSJSONSerialization dataWithJSONObject:JSON options:0 error:error];
if (JSONData) {
    [request setValue:[NSString stringWithFormat:@"%d",[(NSData *)JSONData length]] forHTTPHeaderField:@"content-length"];
    [request setHTTPBody:JSONData];
}

这只会创建请求。剩下的部分使用AFNetworking就很简单了,在这里使用AFJSONRequestOperation只需像已经做的那样传入请求。

 类似资料:
  • 问题内容: 包括: all Spring libs, Apache Tomcat 7.0 library 在构建路径中 但它仍然给出错误: 在“ org.sprintframework.web-3.1.0.M1.jar”中,我可以看到“ org.springframework.web.context.ContextLoaderListener”。 Google上的某个人说应该包含spring.ja

  • 问题内容: 我使用非常简单的代码返回XML 但是,出现以下错误 请帮忙。谢谢 问题答案: 运行时出现NoSuchMethodError表示你使用的库版本与生成代码所针对的版本不同。 在你的情况下,Spring是元凶。在运行时检查类路径上的内容,并确保以下各项: 版本与编译时间罐相同 如果存在多个版本,请删除不需要的版本

  • 问题内容: 我不明白注释和之间的实际区别是什么? 扩展名还是它们具有完全不同的含义?什么时候应该使用它们?在服务层中使用Spring ,在DAO 中使用javax? 谢谢回答。 问题答案: 几年前,Spring定义了自己的Transactional注释以使Spring bean方法具有事务性。 Java EE 7终于做了同样的事情,现在除了EJB方法外,还允许CDI bean方法是事务性的。因此,

  • 我在CentOS虚拟机中安装了RabbitMQ,该虚拟机的网络适配器被定义为Bridge。我正在尝试配置RabbitMQ管理,以便通过机器的IP地址访问WebApp。配置如下:

  • 这个FAQ的最新版本总是可以从Apache主站点得到,位于<http://httpd.apache.org/docs/2.2/faq/> 如果你的问题在这里没有找到答案,你也可以看看Apache 1.3 FAQ ,看你的问题是否在那里有了答案。 主题 背景 关于 Apache HTTP Server 的背景知识。 支持 我遇到问题该怎么办? 错误信息 这些错误信息是什么意思? 背景 什么是Apac

  • 发布问题 更新问题 设置问题悬赏 获取问题列表 获取一个问题详情 删除一个问题 获取用户发布的问题列表 发布问题 POST /questions 输入 字段 类型 描述 subject 字符串 必须,问题主题或者说标题,不能超过 255 字节 ,必须以 ? 结尾。(不区分全角或者半角) topics 数组 必须,绑定的话题,数组子节点必须符合 { "id": 1 } 的格式。 body 字符串