2013-10-01 22 views
14

Bir web uygulamasını UIWebView içinde gösteriyorum ve bazen sayfaların içeriği değişecektir. İçerik değiştirildikten sonra uygulama önbelleği temizler.UIWebView'ın dahili önbelleğini temizle

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

Unsettling bir yükleme ediyorum: Ben daha önce bir HTTP GET isteği göndermez UIWebView ziyaret etmiş olduğunuz bir sayfaya gitmek ama Fakat önbellekten yükler özürlü önbellek şöyle ettik rağmen cachePolicy cachePolicy:NSURLRequestReturnCacheDataElseLoad ile istek.

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

UIWebView

iç cache çeşit var. Zaten ziyaret edilen sayfalar bu iç önbellekten NSURLCache'a gitmek yerine yüklenecek ve ayrıca istek gönderilmeyecek.

UIWebView iç önbelleğini temizlemenin bir yolu var mı? Hatta UIWebView'u yeniden oluşturuyorum ama önbellek hala orada.

+0

Çözümü burada deneyin: http://stackoverflow.com/a/14096331/1749367 – helper

+0

Evet, bu çözümlerden herhangi biriyle başarıya ulaşmak istediklerim için işe yaramıyor. –

+0

Bir geçici çözüm buldum: HTTP yanıt başlığında Önbellek Denetimi özniteliğini maks. Yaş = 0 olarak ayarlayın. Ardından kaynak için her seferinde bir talep gönderilecektir. Bunu çözmenin bir yolu, bir dosya son önbellek temizleme işleminden bu yana daha önce talep edilmişse ve bir son yükten sonra bir kaynağın ikinci kez yüklendiği zaman başka bir değere (ör. 3600) ayarlanmış olup olmadığının izlenmesi olabilir. –

cevap

21

Burada olan, gerçek HTML dosyasını yeniden yüklediği, ancak bu sayfadaki kaynakları yeniden yüklemesi gerektiği anlamına geliyor.

Gördüğüm olası bir çözüm, URL'nin sonuna bir sorgu parametresi eklemektir. Örneğin: Eğer randQuery sorgu parametresi olarak bir random alphanumeric string oluşturabilir veya kalıcı sayısını tutmak ve sadece saymak

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

.

Bu, UIWebView öğesinin uzak kaynaktan yüklenmesi için zorlamalıdır.

+0

Önbelleğe almayı tamamen devre dışı bırakmak istemiyorum. Üzgünüz, NSURLRequestReloadIgnoringLocalAndRemoteCacheData kullanımım kafa karıştırıcı. Soruyu günceller. Aslında cachePolicy: NSURLRequestReturnCacheDataElseLoad kullanarak.Önbelleği temizleyene kadar önbelleğe alınmasını istiyorum. –

+0

Daha sonra sunucu tarafını kullanmak zorunda kalacağınız gibi, içeriği yenilemeye çalışmak yerine içerik değiştiğinde AJAX isteklerini veya Web Sockets'i kullanabilirsiniz. Muhtemelen durumunuzda çalışır mı? –

+0

İyi fikir, ama benim durumumda uygun değil. Başka bir şirket web uygulamasını oluşturdu. Ancak bunu değiştirebilirim, ancak web uygulaması zaten oluşturuldu. –

7

Aynı sorunu yaşadım ve HTTPShouldHandleCookies özelliğini NO olarak ayarlamam sorunu çözdü. Örneğin

:

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

[request setHTTPShouldHandleCookies:NO]; 

[webView loadRequest: request]; 

Umut bu yardım.

+0

Benim için çalışmadı - ağ üzerinden değil, yerel dosyalara erişiyorum. Yine de teşekkürler :) –