2014-07-15 197 views
4

我正在使用AFHTTPSessionManager在網絡上進行API調用。我有會話管理器的signleton對象,它啓動一次基礎URL。偶爾,我需要使用不同的baseurl進行api調用。它只讀在AFNetworking.h文件中。使用兩個不同的baseUrl - AFHTTPSessionManager

在這裏處理不同的baseurl的正確方法是什麼?請幫忙。

+ (ApiClient *)sharedClient { 

    static ApiClient *_sharedClient = nil; 

    static dispatch_once_t oncePredicate; 

    dispatch_once(&oncePredicate, ^{ 
     _sharedClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:kTraktBaseURLString]]; 
    }); 
    return _sharedClient; 
} 
+2

我一般用這個絕對URL,在這種情況下是基本URL忽略 – Stew

+0

沒有ü找到任何解決這個? –

+0

還沒有。我使用兩個不同的類。 –

回答

5

您可以使用+URLWithString:relativeToURL:方法的行爲來覆蓋baseURL。

馬特mentioned it in Docs

對於HTTP方便的方法,從相對於所述基本URL路徑,使用NSURL + URLWithString請求串行化構建體網址:relativeToURL :,提供時。如果baseURL爲零,則路徑需要使用NSURL + URLWithString:來解析爲有效的NSURL對象。

下面是如何基本URL和相對路徑交互的幾個例子:

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/ 

所以,如果你想改變基本URL爲單一的請求,您可以傳遞絕對URL爲URLString參數GET:parameters:success:failure:代替網址路徑。

[manager GET:@"http://otherBaseURL.com/url/path" parameters:nil success:... failure:...] 
相關問題