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 实际上是做啥的? [关闭]
uploadTaskWithStreamedRequest 中的 AFNetworking 错误
AFNetworking 2.0 中的 AFHTTPRequestOperationManager 如何传递 HTTPBody 标签