Impossible de rendre singleton pour la réponse JSON et XML en utilisant AFNetworking 3

Salut, je fais un singleton pour la mise en réseau pour la réponse JSON et XML

mon ApiClient.h

+ (ApiClient *)sharedInstance; -(instancetype)initWithBaseURL:(NSURL *)url sessionConfiguration:(NSURLSessionConfiguration *)configuration; 

Mon ApiClient.m

 + (ApiClient *)sharedInstance { static ApiClient *sharedInstance = nil; static dispatch_once_t oncePredicate; dispatch_once(&oncePredicate, ^{ NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration]; sharedInstance = [[self alloc] initWithBaseURL:[NSURL URLWithSsortingng:SINGPOST_BASE_URL] sessionConfiguration:sessionConfiguration]; [sharedInstance setDataTaskWillCacheResponseBlock:^NSCachedURLResponse *(NSURLSession *session, NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse) { NSHTTPURLResponse *resp = (NSHTTPURLResponse*)proposedResponse.response; NSMutableDictionary *newHeaders = [[resp allHeaderFields] mutableCopy]; if (newHeaders[@"Cache-Control"] == nil) { newHeaders[@"Cache-Control"] = @"max-age=120, public"; } NSURLResponse *response2 = [[NSHTTPURLResponse alloc] initWithURL:resp.URL statusCode:resp.statusCode HTTPVersion:nil headerFields:newHeaders]; NSCachedURLResponse *cachedResponse2 = [[NSCachedURLResponse alloc] initWithResponse:response2 data:[proposedResponse data] userInfo:[proposedResponse userInfo] storagePolicy:NSURLCacheStorageAllowed]; return cachedResponse2; }]; }); return sharedInstance; } -(instancetype)initWithBaseURL:(NSURL *)url sessionConfiguration:(NSURLSessionConfiguration *)configuration { self = [super initWithBaseURL:url sessionConfiguration:configuration]; if (self) { } return self; } 

Le problème est que le singleton ne peut pas gérer les réponses XML et JSON. Il peut parsingr avec succès le JSON et XML pour 1 fois. Mais lorsque vous appelez pour parsingr à nouveau) (après avoir analysé XML avec succès), le résultat ne sera pas analysé correctement (donnez une réponse de string hexadécimale)

Ma request de blocage JSON

 - (void)sendJSONRequest:(NSMutableURLRequest *)request success:(void (^)(NSURLResponse *response, id responseObject))success failure:(void (^)(NSError *error))failure { self.responseSerializer.acceptableContentTypes = [AFHTTPResponseSerializer serializer].acceptableContentTypes; NSURLSessionDataTask *dataTask = [self dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { if (error) { NSLog(@"Error URL: %@",request.URL.absoluteSsortingng); NSLog(@"Error: %@", error); failure(error); } else { NSDictionary *jsonDict = (NSDictionary *) responseObject; success(response,jsonDict); NSLog(@"Success URL: %@",request.URL.absoluteSsortingng); NSLog(@"Success %@",jsonDict); } }]; [dataTask resume]; } 

Ma request de blocage XML

 - (void)sendXMLRequest:(NSMutableURLRequest *)request success:(void (^)(NSURLResponse *response, RXMLElement *responseObject))success failure:(void (^)(NSError *error))failure { self.requestSerializer = [AFHTTPRequestSerializer serializer]; self.responseSerializer = [AFHTTPResponseSerializer serializer]; [self.responseSerializer.acceptableContentTypes setByAddingObject:@"application/xml"]; NSURLSessionDataTask *dataTask = [self dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { if (error) { NSLog(@"Error URL: %@",request.URL.absoluteSsortingng); NSLog(@"Error: %@", error); failure(error); } else { RXMLElement *rootXml = [RXMLElement elementFromXMLData:responseObject]; success(response, rootXml); NSLog(@"Success URL: %@",request.URL.absoluteSsortingng); NSLog(@"Success %@",rootXml); } }]; [dataTask resume]; } 

Ma string hexadécimale échoue la réponse: entrez la description de l'image ici

De toute façon pour faire fonctionner le singleton correctement ou j'ai besoin de faire 2 singleton pour la réponse JSON et XML? Toute aide est très appréciée. Merci!

Votre erreur vous indique probablement qu'il attendait un Content-Type d' application/xml , et que vous avez eu une application/json . C'est difficile à dire parce que vous n'avez pas partagé l'erreur complète, mais c'est probablement quelque chose comme ça.

Il y a deux approches logiques. Non plus:

  1. Avoir AFHTTPSessionManager unique accepter XML et JSON. Ainsi, avec responseSerializer de AFHTTPResponseSerializer et un acceptableContentTypes de application/xml et application/json (ou tout type de Content-Type spécifique renvoyé par vos deux services Web), puis lorsque vous recevez l'object de réponse NSData XML ou JSON comme approprié.

  2. Avoir des objects AFHTTPSessionManager séparés, un pour XML (avec responseSerializer de AFXMLResponseSerializer ) et un pour JSON (avec responseSerializer de AFJSONResponseSerializer ). Notez que si vous faites cela, vous n'avez pas besoin d'ajuster acceptableContentTypes du tout.