AFNetworking 中的 registerHTTPOperationClass 实际上是做啥的? [关闭]

Posted

技术标签:

【中文标题】AFNetworking 中的 registerHTTPOperationClass 实际上是做啥的? [关闭]【英文标题】:What does registerHTTPOperationClass in AFNetworking actually do? [closed]AFNetworking 中的 registerHTTPOperationClass 实际上是做什么的? [关闭] 【发布时间】:2012-12-17 09:25:37 【问题描述】:

我试图了解AFNetworking 框架的工作原理。但是有一点细节我不明白。

我写了一个AFHTTPclient 的子类而不是使它成为一个单例类并添加了一个初始化器,它执行以下操作:

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

我从网上找到的教程中得到了这段代码,但我不明白为什么如果我想取回 JSON 数据,为什么我必须为JSONRequestOperation 注册我的课程?如果我这样做,幕后究竟会发生什么? registerHTTPOperation 类究竟做了什么?

PS:互联网上有没有很好的文档,其中包含AFNetworking 的示例和深入解释?

【问题讨论】:

所有文档都在这里:afnetworking.github.com/AFNetworking 【参考方案1】:

AFHTTPclient 上的 registerHTTPOperationClass: 在使用 getPath 和 postPath 方法时将使用类集来处理您的请求。

在您给定的示例中,HTTPRequestOperation 设置为AFJSONRequestOperation,这意味着对服务器的所有请求都将使用AFJSONRequestOperation 的实例完成。 AFJSONRequestOperation 将尝试使用 NSJSONSerialization 类解析来自服务器的结果。

如果您的服务器使用 XML 响应,您应该将 HTTPRequestOperation 设置为 AFXMLRequestOperation 例如。

【讨论】:

太棒了。谢谢你。这就是我一直在寻找的解释。 对我来说,它只有在我也设置[self setDefaultHeader:@"Accept" value:@"application/json"]; 时才有效。为什么我必须设置 defaultHeader 并注册 AFJSONRequestOperation? @hashier 它们是不同的东西,registerHTTPOperationClass: 设置用于解析响应的类。在您的情况下,服务器需要标头告诉它在JSON 中返回响应。 啊,好吧setDefaultHeader我告诉服务器发送json。我认为它(我的)服务器无论如何都在重播 json,无论我在标头请求中放了什么。 @hashier 这完全取决于您的服务器,有些服务器要求您告诉他们响应类型,而另一些则不需要。如果服务器只支持JSON,那么您不需要设置Accept 标头。

以上是关于AFNetworking 中的 registerHTTPOperationClass 实际上是做啥的? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking 中的 registerHTTPOperationClass 实际上是做啥的? [关闭]

AFNetworking 中的 JSON 错误

uploadTaskWithStreamedRequest 中的 AFNetworking 错误

AFNetworking中的ARC斗争[关闭]

AFNetworking 2.0 中的 AFHTTPRequestOperationManager 如何传递 HTTPBody 标签

IOS中的Afnetworking抛出错误