“重新初始化”sharedInstance

时间:2013-03-19 14:40:59

标签: ios objective-c ipad object shared

这可能听起来很奇怪。

方案

实施AFOauthClient

我创建了一个子类,并用我的baseurl和all创建了一个共享实例 如

+ (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方法重新初始化是一个麻烦。我如何分配一个新的URL并将我的共享实例与baseurl作为新的url。

我尝试了什么:

我正在使用设置包,目的是我在我的用户默认设置中使用url现在只需要创建一个客户端并开始获得响应。我能如何实现它?

澄清:

更改服务器...意味着我有5个VC和一个登录VC,并且所有服务器基本URL都是相同的,直到用户去编辑设置页面。这意味着在设置之后编辑用户必须启动应用程序重新登录和然后获得所有服务。

3 个答案:

答案 0 :(得分:4)

显然,共享/单例实例不是您问题的正确架构。我首先尝试在这里摆脱sharedClient的使用,然后将实例传递给需要它的东西。这样你就可以销毁它并在需要时创建一个新的。

如果那是不切实际的,因为你伤害了你的单身,那么你需要修改它,使它成为“有一个”GYMAFOAuthClient而不是“是一个”{{1 }}。这样你就可以重新配置它。

答案 1 :(得分: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;
}

答案 2 :(得分:0)

我同意Rob的意见,但你也可以在AFOSharedClient中创建你的网址作为属性。

然后你应该可以更新它,因为它只是指向内存中某个点的指针。