【发布时间】:2015-07-23 09:06:46
【问题描述】:
我正在使用此代码创建NSMutableURLRequest:
NSString *urlString = @"http://192.168.1.111/api";
NSURL *url = [NSURL URLWithString:urlString];
NSString *postBody = [NSString stringWithFormat:@"param=%@", param];
NSData *postBodyData = [postBody dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
NSString *postBodyLength = [@( postBodyData.length ) stringValue];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
request.URL = url;
request.HTTPMethod = @"POST";
request.HTTPBody = postBodyData;
request.cachePolicy = NSURLRequestUseProtocolCachePolicy;
[request setValue:postBodyLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
以及发出请求的代码:
NSCachedURLResponse *cachedResponse = [[NSURLCache sharedURLCache] cachedResponseForRequest:request];
if (cachedResponse && cachedResponse.data.length > 0) {
NSError *serializationError = nil;
id cachedResponseData = [NSJSONSerialization JSONObjectWithData:cachedResponse.data options:0 error:&serializationError];
if (!serializationError) {
NSLog(@"WEB: %@:%@ cachedResponseData: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), cachedResponseData);
[self showTranslations:cachedResponseData forWords:queryStrings withCallback:completion];
}
} else {
AFHTTPRequestOperation *requestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
requestOperation.responseSerializer = [AFJSONResponseSerializer serializer];
[requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"WEB: %@:%@ responseObject: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"WEB: %@:%@ error: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), error);
}];
[[NSOperationQueue mainQueue] addOperation:requestOperation];
}
如果我首先使用等于"first" 的param 变量运行它,如果通过else 块并发出请求。在第二次运行时,它通过if 块并从缓存中检索响应数据。但是,如果我使用等于"second" 的param 变量再次运行它,它会再次通过if 块并从缓存中检索与第一个请求对应的值。我怎样才能使它按应有的方式工作并意识到这是一个不同的请求而不是从缓存中获取它?
【问题讨论】:
标签: objective-c caching nsurlrequest nsurlcache