2013-03-19 93 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属性得到自动释放对象。

然后,你应该能够更新它,因为它只是一个指向内存中的点的指针。