2013-05-27 64 views
3

AFNetworking獲取數據這是我AFHTTPClient單:的XML解析錯誤

+ (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"; 

問:

  1. 實施單身人士的整體概念是否良好,我是否需要任何更改?

  2. 如果整個概念錯了,有什麼建議嗎?

  3. 爲什麼我得到這個錯誤?

謝謝。

回答

3
  • Concept of Singleton

    一個Singleton更通常被作爲設計圖案。 通常單身人士是一個班級,其行爲與任何其他班級的行爲完全相同,唯一的例外是單身人士的任何實例都會引用相同的對象數據。這意味着任何一個單例類的實例都是 實際上都是同一個實例。

您可以查看Singleton Pattern獲取更多信息和示例代碼,以強制實施單身人士的使用方式。

  • Is there any suggestion if whole concept is wrong ?

    我會建議你使用辛格爾頓的AFNetworking,因爲你將有隻有 它的一個實例。

  • Your Error

    你所得到的錯誤是因爲AFNetworking要求要報頭的Content-Type爲「應用程序/ XML」爲 「text/xml」 的

嘗試更改此代碼:

[self registerHTTPOperationClass:[AFXMLRequestOperation class]]; 

[self registerHTTPOperationClass:[AFHTTPRequestOperation class]]; 
+0

@ user1832330你修正這個錯誤? – icodebuster

+0

我應該甚至下載這樣的XML數據還是有更簡單的方法?我的意思是,這是下載json的好方法,但不知道xml。我用AFHTTPRequestOperation以singleton和自定義方法取代了AFXMLOperation。所以我不想用AF解析數據(將使用GDataXML來完成),但這是下載數據的好方法嗎? TNX。 – user1832330

+0

我甚至需要在NSDictionary中返回它嗎?或者我應該將整個數據作爲NSArray返回? – user1832330

1

我有一個類似的問題:

Error Domain=AFNetworkingErrorDomain Code=-1016 "Expected content type {(
    "text/xml", 
    "application/xml" 
)}, got application/rss+xml" 

上面的答案是不完全清楚,但它幫了我很多後來看了他們的聊天記錄。 registerHTTPOperationClass不起作用。我決定提供一些代碼。解決辦法是使用本:

[AFXMLRequestOperation XMLParserRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser) 

但使用AFHTTPRequestOperation下載RSS XML和手動創建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); 

}];