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

我尝试了什么:

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

澄清:

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

4

3 回答 3

4

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

如果这不切实际,因为你的单例伤得太深了,那么你需要修改它,使它成为 "has-a"GYMAFOAuthClient而不是 "is-a" GYMAFOAuthClient。这样你就可以重新配置它。

于 2013-03-19T14:44:34.927 回答
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;
}
于 2013-03-19T14:54:05.190 回答
0

我同意 Rob 的观点,但是您也可以在 AFOSharedClient 中将您的 url 创建为属性。

然后您应该能够更新它,因为它只是指向内存中某个位置的指针。

于 2013-03-19T21:30:55.790 回答