2013-10-01 34 views
14

Tôi đang hiển thị ứng dụng web trong một số UIWebView và đôi khi nội dung của các trang sẽ thay đổi. Sau khi nội dung đã được thay đổi, ứng dụng sẽ xóa bộ nhớ cache. Nhưng khi tôi đi đến một trang trước đây tôi đã đến thăm UIWebView không gửi một yêu cầu HTTP GET, nhưng tải từ bộ nhớ cache mặc dù tôi đã vô hiệu hóa bộ nhớ cache như vậy:Xóa bộ nhớ cache nội bộ của UIWebView

[[NSURLCache sharedURLCache] removeAllCachedResponses]; 
[[NSURLCache sharedURLCache] setDiskCapacity:0]; 
[[NSURLCache sharedURLCache] setMemoryCapacity:0]; 

initally Tôi đang tải một yêu cầu với cachePolicy cachePolicy:NSURLRequestReturnCacheDataElseLoad.

[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:myURLString] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:10.0]]; 

UIWebView có một số loại bộ nhớ cache nội bộ. Các trang đã truy cập sẽ được tải từ bộ nhớ cache nội bộ này thay vì đi qua NSURLCache và cũng không có yêu cầu nào được gửi.

Có cách nào để xóa bộ nhớ cache nội bộ của UIWebView không? Tôi thậm chí còn tái tạo các UIWebView nhưng bộ nhớ cache vẫn còn đó.

+0

Bạn đã thử giải pháp ở đây: http://stackoverflow.com/a/14096331/1749367 – helper

+0

Có, không thành công với bất kỳ giải pháp nào phù hợp với những gì tôi muốn thực hiện. –

+0

Tôi đã tìm thấy giải pháp thay thế - đặt thuộc tính Kiểm soát bộ nhớ cache trong tiêu đề phản hồi HTTP thành max-age = 0. Sau đó, một yêu cầu sẽ được gửi cho tài nguyên mỗi lần. Một cách để giải quyết nó có thể là theo dõi nếu một tệp đã được yêu cầu trước khi xóa bộ nhớ cache cuối cùng và đặt độ tuổi tối đa thành giá trị khác (ví dụ: 3600) lần thứ hai tài nguyên được tải sau lần thanh lọc cuối cùng. –

Trả lời

21

Có vẻ như những gì đang xảy ra ở đây là nó tải lại tệp HTML thực, nhưng không nhất thiết phải tải lại các tài nguyên trong trang đó.

Một giải pháp có thể tôi đã thấy là thêm thông số truy vấn vào cuối URL. Ví dụ:

NSString *testURL = [NSString stringWithFormat:@"%@?t=%@", url, randQuery]; 
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:testURL] cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:10.0]]; 

nơi bạn tạo ra một random alphanumeric string như tham số truy vấn randQuery của bạn, hoặc giữ một số liên tục và chỉ cần đếm lên.

Điều này sẽ buộc UIWebView tải từ tài nguyên từ xa.

+0

Tôi không muốn tắt hoàn toàn bộ nhớ đệm. Xin lỗi, việc sử dụng NSURLRequestReloadIgnoringLocalAndRemoteCacheData của tôi rất khó hiểu. Sẽ cập nhật câu hỏi. Trên thực tế sử dụng cachePolicy: NSURLRequestReturnCacheDataElseLoad.Muốn nó được lưu trữ cho đến khi tôi dọn bộ nhớ cache. –

+0

Sau đó, có vẻ như bạn sẽ chỉ phải sử dụng phía máy chủ, bạn có thể có thể sử dụng các yêu cầu AJAX hoặc Web Sockets khi nội dung thay đổi thay vì cố làm mới trang. Điều đó có thể hoạt động trong tình huống của bạn không? –

+0

Ý tưởng hay nhưng không phù hợp trong trường hợp của tôi. Một công ty khác đã tạo ứng dụng web. Tôi có thể sửa đổi nó, nhưng ứng dụng web đã được xây dựng. –

7

Tôi đã gặp sự cố tương tự và đặt thuộc tính HTTPShouldHandleCookies thành NO khắc phục sự cố của tôi.

Ví dụ:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:strurl]]; 

[request setHTTPShouldHandleCookies:NO]; 

[webView loadRequest: request]; 

Hope trợ giúp này.

+0

Không hoạt động cho tôi - tôi đang truy cập các tệp cục bộ, chứ không phải qua mạng. Dù sao cũng cảm ơn bạn :) –

Các vấn đề liên quan