iOS UIWebView缓存问题

时间:2013-01-17 09:30:59

标签: ios xcode caching web-applications uiwebview

我的目标是在iOS上使用UIWebView构建一个Web应用程序,基本上是做BlackBerry为Webworks做的事情。

阅读后,我不确定缓存是如何工作的,所以我尝试了以下测试:

创建简单的Web应用程序,开始使用“Hello World”。

Build&应用程序 - 工作正常

然后更改了login.html(这就是我的hello world被称为)我所做的更改是我用另一个页面的超链接获得了hello world。

当我再次构建和运行时,仍会显示旧页面。

所以我假设某处有缓存?

无论如何最好做以下/什么?

  • 禁用缓存,因为速度并不重要,我们的所有文件都在磁盘上?
  • 每次启动应用程序时都清除缓存?

有没有人遇到过这个?

由于

我试过了: How to delete the cache from UIWebview or dealloc UIWebview

另一次更新------

尝试了另一个简单的测试,我删除了我的HTML文件夹,其中包含所有html,css,js文件,因此它现在处于垃圾箱中。再次运行应用程序并从项目中删除html引用,它仍然完美地加载它们。所以整个事情都缓存在某个地方。

另外一次尝试我也补充说:

-(void)dealloc{
    self.webView.delegate = nil;
    self.webView = nil;
    [webView release];
    [super dealloc];
}

在NativeViewController.m中,这没有帮助。

我的应用程序代码:`

#import "NativeViewController.h"

@implementation NativeViewController

@synthesize webView;

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"login" ofType:@"html"];  
NSData *htmlData = [NSData dataWithContentsOfFile:filePath];  
if (htmlData) {  
    NSBundle *bundle = [NSBundle mainBundle]; 
    NSString *path = [bundle bundlePath];
    NSString *fullPath = [NSBundle pathForResource:@"login" ofType:@"html" inDirectory:path];
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:fullPath]]];

}
}


- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];

// Release any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
[self.webView removeFromSuperview];
self.webView.delegate = nil;
self.webView = nil;
}


 -(void)webViewDidFinishLoad{
[[NSURLCache sharedURLCahce] removeAllCachedResponses];
}
- (void)dealloc {
[webView release];
[super dealloc];
}
@end

`

2 个答案:

答案 0 :(得分:1)

Yes..I encountered the same problem..      
I solved it by adding the below statement  in didFinishLaunchingWithOptions method of AppDelegate class

  [[NSURLCache sharedURLCache] removeAllCachedResponses];

答案 1 :(得分:1)

试试这个

if ([htmlData length]==0) {
//no data
}

如果数据的长度为0,则不会加载数据。 在其他情况下,即使您将从项目中删除html文件,它也会在模拟器中存在,除非您不重置它。

希望它有所帮助。