IOS,勤奋共勉

IOS 开发之请求头

2017-07-06  本文已影响0人  岁月煮酒你与狗

之前在公司做了一个关于借款的app ,后台出于安全的考虑 ,给用户权限分了等级, 请求头不同,所能返回的接口数据也不一样,但是这个请求头不是不变的,在用户完成一定的验证和借款后,请求头发生改变( 服务器返回新的请求头)。

解决方案:我采用NSUserDefaults写入系统文件(大不了 新添加时,删除就是了),

NSString *Token = JSON[@"data"]; JSON 为返回值(id类型)

NSUserDefaults *user = [NSUserDefaults standardUserDefaults ];

[user setObject:Token forKey:@"Token"];

本以为这么简单就解决了这个问题,天真的我运行就是bug  ,

登录后依旧不能请求到数据,没办法了只能断点调试了,后来我发现,我在请求时AFHttpClient 创建了一个只调用一次的单例(为了线程安全又装逼,又高大上)

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{};

这个单例只调用一次,所以我就把它删了,再次执行,依旧没有,但是我退出程序再次运行就可以了,数据拿到了,一点毛病没有。

最后没有在apple 文档里面找到一个

- (BOOL)synchronize;

// -objectIsForcedForKey: returns YES if the value for 'key' is provided by managed preferences (a configuration profile or mcx)(简单说就是立刻马上写入profile)

因为NSUserDefaults 写入系统文件有一定实效性,就是过一段时间再调用- (BOOL)synchronize;这个方法,所以你要及时存取就必须手动调用这个方法。

接下来就是添加到请求头了代码如下

static AFHttpClient *_sharedClient = nil;

_sharedClient = [[AFHttpClient alloc] initWithBaseURL:[NSURL URLWithString:kBaseURLString]];

//不设置会报-1060或者会编码有问题

_sharedClient.responseSerializer = [AFJSONResponseSerializer serializer];

NSUserDefaults *user = [NSUserDefaults standardUserDefaults];

[_sharedClient.requestSerializer setValue:[user objectForKey:@"Token"]  forHTTPHeaderField:@"Authorization"];

[_sharedClient.requestSerializer

setValue:@"application/x-www-form-urlencoded "

forHTTPHeaderField:@"Content-type"];

有什么不对的地方希望大家多提提意见

------.开发之路与君共勉之------

上一篇下一篇

猜你喜欢

热点阅读