小编cai*_*man的帖子

更改AFNetworking baseURL

我正在使用AFNetworking和他们的例子中建议的单例模型.

+ (SGStockRoomHTTPClient *)sharedClient
{
    static SGStockRoomHTTPClient *_sharedClient = nil;
    static dispatch_once_t oncePredicate;
    dispatch_once(&oncePredicate, ^{
        NSString *baseUrlString = [[NSUserDefaults standardUserDefaults] stringForKey:@"server_root_url_preference"];
        _sharedClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:baseUrlString]];
    });

    return _sharedClient;
}

- (id)initWithBaseURL:(NSURL *)url {
    self = [super initWithBaseURL:url];
    if (!self) {
        return nil;
    }
    [self registerHTTPOperationClass:[AFJSONRequestOperation class]];
    [self setDefaultHeader:@"Accept" value:@"text/html"];
return self;
}
Run Code Online (Sandbox Code Playgroud)

使用从用户默认值中获取的baseURL完成初始化.

我的问题是baseURL属性是只读的.如果用户进入设置并更改baseURL用户默认值,我该如何在客户端更改它?

我需要更改baseURL的另一个类似情况是一个API,它需要多个调用和逻辑来确定正确的baseURL.在应用程序运行时,基本URL仍然可以更改(例如,用户更改网络环境,需要通过外部代理服务器从本地连接更改为3G连接).

我明白为什么baseURL属性是只读的:有些像networkReachabilityStatus在后台运行并且与该设置相关联.这就是说,使用setBaseURL方法停止监视,更改值,然后再次开始监视似乎相当容易......

我想我的设计是不对的,在这种情况下我应该放弃单例并在每次baseURL改变时重新创建客户端吗?

objective-c afnetworking

16
推荐指数
1
解决办法
7867
查看次数

在go中解组json时调整结构

像这样解组 JSON(我不控制):

{
    "states": {
        "state": [
            { ...}
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

进入这样的结构:

type Device struct {
    States    struct{ State []State }
}
var dev Device
Run Code Online (Sandbox Code Playgroud)

我得到一个丑陋的语法来访问状态:

dev.States.State[0]
Run Code Online (Sandbox Code Playgroud)

我希望能够改变物体,这样我就可以做到

dev.States[0]
Run Code Online (Sandbox Code Playgroud)

这可以通过标签(在上面的示例中省略,因为不需要)或其他方法来完成,或者我是否必须首先解组到像上面这样的结构,然后根据需要手动重新映射到结构?

json go

5
推荐指数
1
解决办法
131
查看次数

标签 统计

afnetworking ×1

go ×1

json ×1

objective-c ×1