这是我的AFHTTPClient单身人士:
+ (API *)sharedInstance
{
static API *sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[API alloc] initWithBaseURL:[NSURL URLWithString:kAPIHost]];
[sharedInstance setParameterEncoding:AFJSONParameterEncoding];
[sharedInstance registerHTTPOperationClass:[AFXMLRequestOperation class]];
[sharedInstance setDefaultHeader:@"Accept" value:@"application/rss+xml"];
});
return sharedInstance;
}
同一类中的方法(AFHTTPClient):
- (void)requestXMLDataCompletion:(JSONResponseBlock)completionBlock
{
NSMutableURLRequest *apiRequest = [self requestWithMethod:@"GET" path:kAPIPath parameters:nil];
AFXMLRequestOperation *operation = [[AFXMLRequestOperation alloc] initWithRequest:apiRequest];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject){
// success
completionBlock(responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// failure
completionBlock([NSDictionary dictionaryWithObject:[error localizedDescription] forKey:@"error"]);
}];
[operation start];
}
当我调用此函数从RSS获取XML时,我收到此错误:
error = "Expected content type {(\n \"application/xml\",\n \"text/xml\"\n)}, got application/rss+xml";
问题:
实施单身人士的整个概念是否良好,我是否需要进行任何更改?
如果整个概念出错,是否有任何建议?
为什么我收到此错误?
感谢。
答案 0 :(得分:3)
<强> Concept of Singleton
强>
单身通常被称为设计模式。 通常单例是一个类,其行为与任何其他类完全相同, 唯一的例外是单身人士的任何实例都引用了 相同的对象数据。这意味着单例类的任何实例都是 实际上都是同一个实例。
您可以查看Singleton Pattern以获取更多信息和示例代码,以强制执行单身人士的使用方式。
Is there any suggestion if whole concept is wrong ?
我建议您使用Singleton进行AFNetworking,因为您将拥有 只有一个例子。
<强> Your Error
强>
您收到的错误是因为AFNetworking请求要求标题内容类型为“application / xml”或“text / xml”
尝试更改此代码:
[self registerHTTPOperationClass:[AFXMLRequestOperation class]];
到
[self registerHTTPOperationClass:[AFHTTPRequestOperation class]];
答案 1 :(得分:1)
我遇到了类似的问题:
Error Domain=AFNetworkingErrorDomain Code=-1016 "Expected content type {(
"text/xml",
"application/xml"
)}, got application/rss+xml"
上面的答案并不完整和清晰,尽管在我阅读他们的聊天后它给了我很多帮助。 registerHTTPOperationClass
没有帮助。我决定提供一些代码。解决方案是 NOT 使用它:
[AFXMLRequestOperation XMLParserRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser)
但是使用RSS XML
下载AFHTTPRequestOperation
并手动创建NSXMLParser
:
NSString *articlesUrlString = @"http://pro.rabota.ru/feed/moscow.content.rss";
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:articlesUrlString]];
NSMutableURLRequest *request = [httpClient requestWithMethod:@"GET" path:@"" parameters:nil];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSData *xmlData = (NSData *)responseObject;
NSXMLParser *XMLParser = [[NSXMLParser alloc] initWithData:xmlData];
XMLParser.delegate = self;
[XMLParser parse];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"error: %@", error);
}];