• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - AFNetworking AFHTTPClient AFJSONRequestOperation 不使用 JSON 操作

[复制链接]
菜鸟教程小白 发表于 2022-12-13 03:51:26 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我关注了这个截屏视频... http://nsscreencast.com/episodes/6-afnetworking

我的单例 AFHTTPClient 代码是...

+ (MyClient *)sharedInstance
{
    static dispatch_once_t once;
    static MyClient *myClient;
    dispatch_once(&once, ^ { myClient = [[MyClient alloc] initWithBaseURL:[NSURL URLWithString:MyBaseURL]];});
    return myClient;
}

- (id)initWithBaseURLNSURL *)url
{
    self = [super initWithBaseURL:url];
    if (self) {
        // these are not actual values but I am setting default headers.
        [self setDefaultHeader"sdfg" value"4"];
        [self setDefaultHeader"std" value"3"];
        [self setDefaultHeader"reg" value"5"];
        [self setDefaultHeader"yu" value"1"];
        [self setDefaultHeader"xv" value"3"];
        [self setDefaultHeader:@"hmm" value:@"5"];

        [self registerHTTPOperationClass:[AFJSONRequestOperation class]];
    }
    return self;
}

然后我像...一样执行它

[[MyClient sharedInstance] getPath:@"blah.php" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSMutableArray *stats = [NSMutableArray array];

        // it crashes on the next line because responseObject is NSData
        for (NSDictionary *dictionary in responseObject) {
            CCStatistic *stat = [[CCStatistic alloc] initWithDictionary:dictionary];

            [stats addObject:stat];
        }

        self.stats = stats;
        [self.tableView reloadData];
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error retrieving!");
        NSLog(@"%@", error);
    }];

一切正常。我已经用 Charles 拦截了它,它正在发送正确的请求并接收正确的 JSON,但该操作不是 JSON 操作。

所以 responseObjectNSData 而不是我期望的 JSON 对象

我错过了使用 JSON 操作的任何配置吗?



Best Answer-推荐答案


在您的情况下,决定请求是否可由 JSON 操作处理的代码行如下:

return [[self acceptableContentTypes] intersectsSet:AFContentTypesFromHTTPHeader([request valueForHTTPHeaderField:@"Accept"])];

如解释 here通过 Mattt Thompson(AFNetworking 的作者),您必须将请求的 Accept header 设置为 application/json

这并不直观,并且高度依赖于实现,但它确实有效。

添加

[self setDefaultHeader:@"Accept" value:@"application/json"];

到你的客户端初始化,应该没问题,不管路径扩展。

关于ios - AFNetworking AFHTTPClient AFJSONRequestOperation 不使用 JSON 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18470748/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap