前言
AFNetworking升级到3.0之后setImageWithURL的逻辑有变化,只要请求的图片在缓存中已存在,则直接使用缓存图片,导致原来根据session刷新验证码的流程不能实现。
AFNetworking3.0之前
在升级AFNetworking3.0之前,项目中有获取图片验证码的需求,使用setImageWithURL方法能很容易地实现需求(AFNetworking自动携带服务器返回的cookie信息,每次请求根据cookie获取不同的验证码)。
NSURL *url = [NSURL URLWithString:@"xxx"];
[myImgView setImageWithURL:url placeholderImage:[UIImage imageNamed:@"xxx"] cache:NSURLRequestReloadIgnoringCacheData];
AFNetworking3.0
AFNetworking3.0的setImageWithURL方法去掉了cache参数,直接检查是否有缓存图片,如果有就不再进行新的请求,这样就使得图片验证码不能刷新。采取的解决办法是每次刷新验证码之前,先将内存中的缓存图片清除。
NSURL *url = [NSURL URLWithString:@"xxx"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[[[AFImageDownloader defaultInstance] imageCache]removeImageforRequest:request withAdditionalIdentifier:nil];//删除图片缓存
[request addValue:@"image/*" forHTTPHeaderField:@"Accept"];
[myImgView setImageWithURLRequest:request placeholderImage:[UIImage imageNamed:@"xxx"] success:nil failure:nil];
网友评论