我已經看到這個問題的幾個職位,我不知道如何得到這個工作。例如,這篇文章NSCachedURLResponse returns object, but UIWebView does not interprets contentUIWebView NSURLCache加載離線數據
建議我們繼承並覆蓋cachedResponseForRequest
並在返回緩存響應之前修改NSURLRequest
(不知道爲什麼需要這樣做)。
這是代碼,我在我的NSURLCache
子類:
- (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request {
NSCachedURLResponse *resp = [super cachedResponseForRequest:request];
if (resp != nil && resp.data.length > 0) {
NSDictionary *headers = @{@"Access-Control-Allow-Origin" : @"*", @"Access-Control-Allow-Headers" : @"Content-Type"};
NSHTTPURLResponse *urlresponse = [[NSHTTPURLResponse alloc] initWithURL:request.URL statusCode:200 HTTPVersion:@"1.1" headerFields:headers];
NSCachedURLResponse *cachedResponse = [[NSCachedURLResponse alloc] initWithResponse:urlresponse data:resp.data];
return cachedResponse;
} else {
return nil;
}
}
現在,當我加載通過web視圖的要求,我下線,委託didFailLoadWithError
被調用(這是無法加載) ,但在調用委託方法之前,我的cachedResponseForRequest
方法被調用,並且緩存的響應有一些html,但我的didFailLoadWithError
方法仍然被調用。所以我的問題是,如果我們返回來自NSURLCache
的緩存響應,webViewDidFinishLoad
應該被調用,如果不是我如何做這項工作?
我有這個在我的didFinishLaunchingWithOptions
:
NSUInteger cacheSizeMemory = 500*1024*1024; // 500 MB
NSUInteger cacheSizeDisk = 500*1024*1024; // 500 MB
NSURLCache *sharedCache = [[CustomCache alloc] initWithMemoryCapacity:cacheSizeMemory diskCapacity:cacheSizeDisk diskPath:@"nsurlcache"];
[NSURLCache setSharedURLCache:sharedCache];
這就是我想要的工作流程:
- 啓動的應用程序。
- 擊出了一些URL(可以說slickdeals.net)
- 轉到離線殺死應用
- 啓動應用程序
UIWebView
嘗試打URL,但設備處於脫機狀態,並返回返回緩存的響應。- 我們顯示緩存的響應。
任何想在我的代碼中需要更改的想法是讚賞!