2013-03-19 125 views
0

這可能聽起來很奇怪。「重新初始化」共享實例

方案

實施AFOauthClient

我創建了一個子類,並創建一個共享實例與我的BaseURL和所有 作爲

+ (GYMAFOAuthClient *)sharedClient { 
    static GYMAFOAuthClient *_sharedClient = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 

     NSURL *url =[NSURL URLWithString:[[NSUserDefaults standardUserDefaults] stringForKey:@"kServer_Address"]]; 
     if (url==nil) { 
      [[[UIAlertView alloc]initWithTitle:@"Required" message:@"Please enter the required fields in the settings page of the application" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]show]; 
     } 
     else 
     { 
      _sharedClient = [GYMAFOAuthClient clientWithBaseURL:url clientID:kClientID secret:kClientSecret]; 
     }  
    }); 
    return _sharedClient; 
} 

完美的作品。

現在我有一個要求,切換到其他服務器和我使用dispatch_once方法重新初始化是trouble.How我可以指定一個新的URL,讓我的共享實例用的BaseURL如新網址。

我的嘗試:

我使用設置包的目的,我在我的用戶的默認值現在只需要創建一個客戶端,並開始獲得responses.How我能實現它的網址是什麼?

澄清:

更改服務器......意味着我有5 VC和一個登錄VC和所有的服務器基本URL是一樣的,直到用戶去修改設置頁面。所以以後這意味着設置編輯用戶必須啓動應用程序重新登錄,然後獲取所有服務。

回答

4

很顯然,共享/單例實例並不是您問題的正確體系結構。我首先試圖擺脫這裏使用的sharedClient,並將實例傳遞給需要它的東西。這樣你就可以銷燬它並在需要時創建一個新的。

如果這太不切實際了,因爲你已經傷害了你的單身太深了,那麼你需要修改它,以便它是「有-a」而不是「is-a」GYMAFOAuthClient。這樣你就可以重新配置它。

+0

初學者問題。請說明還有什麼要做。我幾乎完成了一切,所以一個完整的改變是有點麻煩!但是,你們能解釋更多以幫助我重寫嗎? – 2013-03-19 14:50:31

+0

@bbum一個懷疑。如果我嘗試這種方式oauth成爲我的麻煩..我設置客戶端頭與我從登錄頁面獲得的令牌,因此我設計爲一個共享/單身實例。如果我以另一種方式使它如何我可以管理嗎? – 2013-03-19 15:14:33

0

您可以使用此代碼

+ (GYMAFOAuthClient *) clientWithURL:(NSURL*) url { 

GYMAFOAuthClient *client = nil; 
    if (url==nil) { 
     [[[UIAlertView alloc]initWithTitle:@"Required" message:@"Please enter the required fields in the settings page of the application" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]show]; 
    } 
    else 
    { 
     client = [GYMAFOAuthClient clientWithBaseURL:url clientID:kClientID secret:kClientSecret]; 
    } 
return client; 
} 
0

我羅布同意這一點,但是你也可以創建你的網址,做爲AFOSharedClient屬性得到自動釋放對象。

然後,你應該能夠更新它,因爲它只是一個指向內存中的點的指針。