我正在創建一個應用程序,我希望隨時使用緩存響應。我遇到了一個與NSURLCache有關的奇怪問題,更具體地說,如果我在我的請求中設置了NSURLRequestReturnCacheDataDontLoad,我沒有在iOS 8上獲得緩存響應。以下是我使用AFNetworking得到此代碼的代碼:iOS 8 NSURLCache問題
// Define web request.
void (^simpleBlock)(void) = ^{
GTSessionManager.manager.requestSerializer.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
[GTSessionManager.manager POST:string parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {
NSDictionary *responseJson = responseObject;
[self parseJsonSuccess:responseJson];
} failure:^(NSURLSessionDataTask *task, NSError *error) {
if (error.userInfo[JSONResponseSerializerWithDataKey]) {
NSData *data = error.userInfo[JSONResponseSerializerWithDataKey];
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data
options:kNilOptions
error:&error];
[self parseJsonError:json];
}
else
[self parseJsonError:nil];
}];
};
if (self.shouldUseCache) {
GTSessionManager.manager.requestSerializer.cachePolicy = NSURLRequestReturnCacheDataDontLoad;
[GTSessionManager.manager POST:string parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {
NSDictionary *responseJson = responseObject;
[self parseJsonCacheSuccess:responseJson];
// Load second request.
simpleBlock();
} failure:^(NSURLSessionDataTask *task, NSError *error) {
simpleBlock();
}];
}
else
simpleBlock();
這裏的主要想法是,如果客戶端想要使用緩存,第一個請求應該嘗試加載它,將結果傳遞給處理程序並開始重新加載請求以刷新緩存。
此方法在iOS 7上運行良好,但不適用於iOS 8+。我通過以下調用設置了NSURLCache。
NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:500 * 1024 * 1024
diskCapacity:500 * 1024 * 1024
diskPath:@"cache" /**Tried nil here as well. */];
[NSURLCache setSharedURLCache:sharedCache];
我讀了一些文章和其他關於這個問題,但我不能得到這個工作。我錯過了什麼嗎?它可能與我正在使用POST請求有關嗎?
編輯 忘了提及我沒有在我的服務器上使用緩存策略。我也嘗試使用Cache-Control=max-age=604800, public
設置緩存策略,但我得到了相同的行爲。