我找不到我的问题的答案,可能是我错过了一些事情...
当我请求一个URL时,我需要知道响应是来自缓存还是来自网络。
状态码是304还是200? (但AFNetworking
始终响应200)
使用ASIHTTPRequest
,我曾经从didUseCachedResponse
中检查“ASIHTTPRequest
”,这是完美的。
最佳答案
我想我找到了一种确定是否从缓存返回响应或不使用AFNetworking 2.0的解决方案。我发现,每次从服务器返回新响应时(状态200,而不是状态304),都会调用cacheResponseBlock
(它是AFHTTPRequestOperation
的属性)。如果应缓存响应,则该块应返回NSCachedURLResponse
;否则应返回nil。这样,您可以过滤响应并仅缓存其中的一些响应。在这种情况下,我将缓存来自服务器的所有响应。诀窍是,当服务器发送304并且从缓存加载响应时,将不会调用此块。因此,这是我正在使用的代码:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
BOOL __block responseFromCache = YES; // yes by default
void (^requestSuccessBlock)(AFHTTPRequestOperation *operation, id responseObject) = ^(AFHTTPRequestOperation *operation, id responseObject) {
if (responseFromCache) {
// response was returned from cache
NSLog(@"RESPONSE FROM CACHE: %@", responseObject);
}
else {
// response was returned from the server, not from cache
NSLog(@"RESPONSE: %@", responseObject);
}
};
void (^requestFailureBlock)(AFHTTPRequestOperation *operation, NSError *error) = ^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"ERROR: %@", error);
};
AFHTTPRequestOperation *operation = [manager GET:@"http://example.com/"
parameters:nil
success:requestSuccessBlock
failure:requestFailureBlock];
[operation setCacheResponseBlock:^NSCachedURLResponse *(NSURLConnection *connection, NSCachedURLResponse *cachedResponse) {
// this will be called whenever server returns status code 200, not 304
responseFromCache = NO;
return cachedResponse;
}];
该解决方案对我有用,到目前为止,我还没有发现任何问题。但是,如果您有更好的主意或对我的解决方案有异议,请随时发表评论!
关于iphone - AFNetworking : How to know if response is using cache or not ? 304或200,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12180727/