AFNetworking: AFHTTPClient con subdominios

Estoy usando AFNetworking y quiero crear una instancia de AFHTTPClient . Este inicializador de class requiere un parámetro baseUrl . Si paso "www.mysite.com" , ¿cómo puedo usar el mismo cliente con un subdominio más adelante? Por ejemplo, " users.mysite.com "

No quiero crear un cliente diferente para cada subdominio que uso. Además, no puedo cambiar la baseUrl ya que es de solo lectura. ¿Alguna idea sobre cómo lograr esto?

No tiene que especificar una ruta relativa: puede especificar una ruta absoluta.

De los documentos:

Both -requestWithMethod:path:parameters: and -multipartFormRequestWithMethod:path:parameters:constructingBodyWithBlock: construye URL desde la ruta relativa a -baseURL , usando NSURL +URLWithString:relativeToURL: A continuación, se muestran algunos ejemplos de cómo baseURL la baseURL y las routes relativas:

 NSURL *baseURL = [NSURL URLWithString:@"http://example.com/v1/"]; [NSURL URLWithString:@"foo" relativeToURL:baseURL]; // http://example.com/v1/foo [NSURL URLWithString:@"foo?bar=baz" relativeToURL:baseURL]; // http://example.com/v1/foo?bar=baz [NSURL URLWithString:@"/foo" relativeToURL:baseURL]; // http://example.com/foo [NSURL URLWithString:@"foo/" relativeToURL:baseURL]; // http://example.com/v1/foo [NSURL URLWithString:@"/foo/" relativeToURL:baseURL]; // http://example.com/foo/ [NSURL URLWithString:@"http://example2.com/" relativeToURL:baseURL]; // http://example2.com/ 

También es importante tener en count que se agregará una barra inclinada final a cualquier baseURL sin una, que de lo contrario provocaría un comportamiento inesperado al build URL utilizando routes sin barra inclinada.

Para que pueda hacer cosas como [[MyClient shanetworkingClient] getPath:@"http://users.mysite.com/etc" ...] y se resolverá en la URL completa. También puede escribir sus propios methods getUserPath como getUserPath : la implementación es simple.

Resolví un problema similar creando múltiples singletons:

 + (id)shanetworkingJSONClient { static dispatch_once_t pnetworking = 0; __strong static id __jsonClient = nil; dispatch_once(&pnetworking, ^{ __jsonClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:[TSAPIURL stringByAppendingString:@"json/"]]]; [__jsonClient setParameterEncoding:AFFormURLParameterEncoding]; [__jsonClient registerHTTPOperationClass:[AFJSONRequestOperation class]]; }); return __jsonClient; } + (id)shanetworkingXMLClient { static dispatch_once_t pnetworking = 0; __strong static id __xmlClient = nil; dispatch_once(&pnetworking, ^{ __xmlClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:[TSAPIURL stringByAppendingString:@"xml/"]]]; [__xmlClient setParameterEncoding:AFFormURLParameterEncoding]; [__xmlClient registerHTTPOperationClass:[AFHTTPRequestOperation class]]; }); return __xmlClient; }