OStack程序员社区-中国程序员成长平台

标题: ios - AFNetworking AFHTTPClient AFJSONRequestOperation 不使用 JSON 操作 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 03:51
标题: ios - AFNetworking AFHTTPClient AFJSONRequestOperation 不使用 JSON 操作

我关注了这个截屏视频... 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/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4