AFNetworking中的registerHTTPOperationClass实际上是做什么的?

6

我试图理解AFNetworking框架的工作原理。但是,有些细节我不太理解。

我编写了一个AFHTTPClient子类,并将其设置为单例类,然后添加了一个初始化器,该初始化器执行以下操作:

- (id)initWithBaseURL:(NSURL *)url {
    self = [super initWithBaseURL:url];
    if (self) {
        [self registerHTTPOperationClass:[AFJSONRequestOperation class]];
    }
    return self;
}

我从互联网上的一篇教程中得到了这段代码,但我不明白为什么我需要为JSONRequestOperation注册我的类,如果我想获取JSON数据?如果我这样做了,背后会发生什么?registerHTTPOperation类到底是做什么的?
PS:在互联网上是否有一个良好的文档,其中包含AFNetworking的示例和深入解释?

2
所有文档都在这里:http://afnetworking.github.com/AFNetworking/ - rckoenes
1个回答

11

registerHTTPOperationClass:AFHTTPclient 上的方法,用于设置处理使用 getPath 和 postPath 方法请求时所需的类。

在您给出的示例中,HTTPRequestOperation 被设置为 AFJSONRequestOperation,这意味着所有请求将使用 AFJSONRequestOperation 的实例发送到服务器。 AFJSONRequestOperation 将尝试使用 NSJSONSerialization 类解析来自服务器的结果。

如果您的服务器响应的是 XML,则应将 HTTPRequestOperation 设置为例如 AFXMLRequestOperation


太棒了。谢谢你。这就是我在寻找的解释。 - Sebastian Boldt
1
只有当我同时设置 [self setDefaultHeader:@"Accept" value:@"application/json"]; 时,它才能正常工作。为什么我需要设置defaultHeader并注册AFJSONRequestOperation? - hashier
3
它们是不同的东西,registerHTTPOperationClass: 设置用于解析响应的类。在你的情况下,服务器需要头部告诉它返回 JSON 格式的响应。 - rckoenes
啊,好的,使用 setDefaultHeader 我告诉服务器发送 json。我以为我的服务器无论我在头请求中放什么都会回复 json。 - hashier
@hashier 这完全取决于你的服务器,有些服务器需要你告诉它们响应类型,而其他服务器则不需要。如果一个服务器只支持 JSON,那么你往往不需要设置 Accept 头。 - rckoenes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接